石家莊網(wǎng)站建設(shè)策劃方案杭州seo搜索引擎優(yōu)化
題目描述
跳房子,也叫跳飛機(jī),是一種世界性的兒童游戲。
游戲參與者需要分多個(gè)回合按順序跳到第1格直到房子的最后一格
跳房子的過(guò)程中,可以向前跳,也可以向后跳。
假設(shè)房子的總格數(shù)是count,小紅每回合可能連續(xù)跳的步教都放在數(shù)組steps中,請(qǐng)問(wèn)數(shù)組中是否有一種步數(shù)的組合,可以讓小紅兩個(gè)回合跳到最后一格?
如果有,請(qǐng)輸出索引和最小的步數(shù)組合。
注意:
數(shù)組中的步數(shù)可以重復(fù),但數(shù)組中的元素不能重復(fù)使用。
提供的數(shù)據(jù)保證存在滿足題目要求的組合,且索引和最小的步數(shù)組合是唯一的。
輸入描述
第一行輸入為房子總格數(shù)count,它是int整數(shù)類型。
第二行輸入為每回合可能連續(xù)跳的步數(shù),它是int整數(shù)數(shù)組類型。
輸出描述
返回索引和最小的滿足要求的步數(shù)組合(順序保持steps中原有順序)
樣例
輸入
[1,4,5,2,2]
7
輸出
[5, 2]
說(shuō)明
無(wú)
輸入
[-1,2,4,9,6]
8
輸出
[-1, 9]
說(shuō)明
此樣例有多種組合滿足兩回合跳到最后,譬如:[-1,9],[2,6],其中[-1,9]的索引和為0+3=3,[2,6]的索和為1+4=5,所以索引和最小的步數(shù)組合[-1,9]
算法
如題目描述,即需要判斷列表中是否存在兩個(gè)元素的和等于目標(biāo)值,如果有多個(gè)則返回其索引和最小的一對(duì),這意味著需要遍歷所有組合才行。
粗解
ls = list(map(int, input()[1:-1].split(',')))tar = int(input())minn = 999999999999999999999999999
lso = []
for i in range(len(ls)-1):for j in range(i+1, len(ls)):if ls[i] + ls[j] == tar:if i + j < minn:lso = [ls[i], ls[j]]minn = i+jbreakprint(lso)
優(yōu)化
a = list(map(int, input()[1:-1].split(',')))
n = int(input())
m = len(a)
minn = 2 * n
ans1 = -1
ans2 = -1
for i in range(m): # 循環(huán)遍歷第一個(gè)數(shù)for j in range(i + 1, m): # 尋找是否有數(shù)匹配if a[i] + a[j] == n and i + j < minn: # 記錄答案ans1 = a[i]ans2 = a[j]minn = i + j
print(f"[{ans1}, {ans2}]")