python 和為S的連續正數序列

2021-08-26 09:36:43 字數 2466 閱讀 5599

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!

輸出所有和為s的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序
方法來自:

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

對應每個測試案例,輸出兩個數,小的先輸出。
# -*- coding:utf-8 -*-

class solution:

def findnumberswithsum(self, array, tsum):

# write code here

# 用兩個頭尾指標,值大了,尾指標減一,值小了,頭指標加一

# 如果相等頭指標加一,尾指標減一

# 頭尾指標相等時停止

head = 0

tail = len(array) -1

result =

while head<=tail:

cursum = array[head]+ array[tail]

if cursum == tsum :

head +=1

tail -=1

elif cursum > tsum:

tail -=1

else:

head +=1

if len(result)==1:

return result[0]

elif len(result)==0:

return

else:

curmpl = result[0][0]*result[0][1]

tem = result[0]

for each in result:

if curmpl > each[0]*each[1]:

tem.pop(0)

tem.extend(each)

curmpl = each[0]*each[1]

return tem

由於輸出乘積最小的:

例子

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],21
相加為21的組合[[1, 20], [2, 19], [3, 18], [4, 17], [5, 16], [6, 15], [7, 14], [8, 13], [9, 12], [10, 11]]

從結果可以看出第乙個就是最小的,所以找到第一對組合就可以返回,他們滿足乘積最小。

程式可以繼續優化:

參考牛客的答案

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

class solution:

def findnumberswithsum(self, array, tsum):

if not array:

return

length = len(array)

i, j = 0, length-1

while i <= j:

temp = array[i] + array[j]

if temp == tsum:

return [array[i], array[j]]

elif temp > tsum:

j -= 1

elif temp < tsum:

i += 1

return

和為S的連續正數序列(python)

和為s的連續正數序列 使用滑動視窗來求解這道題,核心思想就是設定乙個大小不固定的視窗來圈住目標列表,如果列表中的資料滿足條件就新增到答案中,否則就動態的移動該滑動視窗。coding utf 8 class solution def findcontinuoussequence self,tsum 使...

和為S的連續正數序列

題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...

和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...