1.题目描述
给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:
1, 9
2, 8
解题方法
用左右两个指针不断向中间压缩的方式实现
n,k = list(map(int,input().split()))
arr = list(map(int,input().split()))
i,j = 0,len(arr)-1
#result = []
while i < j:
if arr[i] + arr[j] ==k:
#result.append([arr[i],arr[j]])
print(arr[i],arr[j])
while arr[i] == arr[i+1]:
i +=1
while arr[j] == arr[j-1]:
j -= 1
if arr[i] + arr[j] <k:
i += 1
else:
j -= 1
#for res in result:
# print(res[0],res[1])
2.题目描述
给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序三元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:
-4 5 9
-3 4 9
-3 5 8
0 1 9
0 2 8
1 4 5
解题方法
n,target = list(map(int, input().split()))
arr = list(map(int, input().split()))
i = 0
result = []
while i < n-3:
j = i + 1
k = n-1
temp = target-arr[i]
while j < k:
if arr[j] + arr[k] == temp:
# result.append([arr[i],arr[j],arr[k]])
print(arr[i],arr[j],arr[k])
while arr[j] == arr[j+1]:
j += 1
while arr[k] == arr[k-1]:
k -= 1
j += 1
elif arr[j] + arr[k] <temp:
j += 1
else:
k -= 1
while arr[i] == arr[i+1]:
i += 1
i +=1