给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:
1, 9
2, 8
[要求]
时间复杂度为
,空间复杂度为
第一行有两个整数n, k
接下来一行有n个整数表示数组内的元素
输出若干行,每行两个整数表示答案
按二元组从小到大的顺序输出(二元组大小比较方式为每个依次比较二元组内每个数)
10 10 -8 -4 -3 0 1 2 4 5 8 9
1 9 2 8
if __name__=='__main__': aa=list(map(int,input().split())) bb=list(map(int,input().split())) bb=list(set(bb)) bb=sorted(bb) i=0 j=len(bb)-1 target=1 while i<j: if (bb[i]+bb[j])<aa[1]: i+=1 elif (bb[i]+bb[j])==aa[1]: print(bb[i],bb[j]) i+=1 j-=1 else: j-=1有个疑问,为什么这个通过率为60%,思想也是双指针的
n, k = map(int, input().split()) nums = list(map(int, input().split())) left = 0 right = len(nums) - 1 while left < right: if nums[left] + nums[right] == k: print(nums[left], nums[right]) num_left = nums[left] while left < right and nums[left] == num_left: left += 1 num_right = nums[right] while left < right and nums[right] == num_right: right -= 1 elif nums[left] + nums[right] < k: left += 1 else: right -= 1 # 注意中间有相同的数字,需要处理,不然就重复打印了