穷举
给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:
import sys n,k=sys.stdin.readline().split() line =(map(int, input().strip().split())) line=sorted(list(set(line))) k=int(k) p1=0 p2=int(n)-1 while p1<p2: if line[p1]+line[p2]<k: p1+=1 p2+=1 elif line[p1]+line[p2]==k: print (line[p1],line[p2]) p1 += 1 p2-=1
在自己的编辑器上调试都能过,在牛客编辑器上报错,哎!
思路:首先对接收的数组进行排序,给定两个首尾指针,判断两个指针的值相加是否等于给定是数值,如果小于给定的数值,则首指针往前移动一位,而尾指针需要保持不动(保持不动的方式就是在小于k的判断中,让p1+=1 p2+=1)因为后面p2减少了一个 1,因为没注意到这个 调试了很久 发现不对,
加油!

浙公网安备 33010602011771号