輸入乙個遞增排序的陣列和乙個數字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 輸...