《劍指offer》 57 和為S的數字

2021-08-20 03:08:33 字數 2423 閱讀 5697

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。

先遍歷每個元素,在做差,看看差值在不在裡面,因為陣列是排序過的,所以乘積較小的肯定就是離得最遠的,、python 的話還是很方便的

# -*- coding:utf-8 -*-

class solution:

def findnumberswithsum(self, array, tsum):

# write code here

if len(array) == 0:

return

num = 0

for i in array:

num += 1

another = tsum - i

if another in array:

return i,another

if num == len(array):

return

題目一:和為s的2個數字

輸入乙個遞增的陣列和乙個數字,在陣列中查詢2個數字,是他們的和正好為s,如果有多對的和為s,則輸出任意一對即可

思路:2個指標,乙個隊首,乙個隊尾,當2個數字之和大於s,就把大的向前移,當2個數字之和小於s,就把小的向後移,

class solution:

def sumrm(self, l,s):

if l == or l is none:

return none

i,j = 0,len(l)-1

while i < j:

sumn = l[i] + l[j]

if sumn < s:

i +=1

elif sumn > s:

j = j - 1

else:

return l[i],l[j]

題目三:和為s的連續正數序列

輸入乙個正數s,列印出所有和為s的連續正數序列(至少包含2個數)

解法:按照書上的思路寫的**,在平台上執行出錯,不清楚為什麼,在自己的ide上就可以。。。**如下

# -*- coding:utf-8 -*-

class solution:

def findcontinuoussequence(self, tsum):

# write code here

if tsum < 3:

return

small = 1

big = 2

middle = (1 + tsum)//2

cursum = small + big

while small < middle:

if cursum == tsum:

self.printsequence(small, big, tsum)

while cursum > tsum and small < middle:

cursum = cursum - small

small += 1

if cursum == tsum:

self.printsequence(small, big, tsum)

big = big + 1

cursum = cursum + big

def printsequence(self, small, big, tsum):

l =

for i in range(tsum):

print (l[small:big+1])

c = solution()

c.findcontinuoussequence(9)

牛客上大佬的解法思路也是這樣,其中輸出直接用列表生成,而不是我的for迴圈完成,是這裡的問題嗎?不清楚測試**。。。
# -*- coding:utf-8 -*-

class solution:

def findcontinuoussequence(self, tsum):

# write code here

if tsum < 3:

return

small = 1

big = 2

middle = (tsum + 1)>>1

cursum = small + big

output =

while small < middle:

if cursum == tsum:

big += 1

cursum += big

elif cursum > tsum:

cursum -= small

small += 1

else:

big += 1

cursum += big

return output

劍指offer 57 和為S的數字

和為 s 的連續正整數序列 輸入乙個陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s 如果有多對數字的和等於 s 則輸出任意一對即可 例如 輸入陣列 和數字 15。由於 4 11 15 因此 輸出 4 和 11 排序 利用兩個指標 left right class solution 輸入乙...

劍指offer 57 和為s的兩個數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,則輸出任意一對即可。對列表中元素根據target計算餘數,判斷餘數是否在例表中,有則返回。但時間複雜度高為o n 2 當列表很大時,超出時間限制。class solution def twosum...

劍指 Offer 57 和為s的兩個數字

輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,則輸出任意一對即可。示例 1 輸入 nums 2,7,11,15 target 9 輸出 2,7 或者 7,2 示例 2 輸入 nums 10,26,30,31,47,60 target 40 輸...