给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:
1, 9
2, 8
[要求]
时间复杂度为O(n),空间复杂度为O(1)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
int left=0;
int right=n-1;
while(left<right){
if(arr[left]+arr[right]>k){
right--;
}else if(arr[left]+arr[right]<k){
left++;
}else{
if(left==0||arr[left]!=arr[left-1])
//因为是要求打印不能重复,
//所以arr[left]!=arr[left-1]是为了判定看现在的数和上一个是不是重复的,
//不是重复的,才需要打印,而left==0是为了arr[left]!=arr[left-1]这个left==1
//的时候,arr[left-1],数组越界。
System.out.println(arr[left]+" "+arr[right]);
left++;
right--;
}
}
}
}