给定已排序数组arr和k,不重复打印arr中所有相加和为k的不降序二元组
1、暴力破解
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {-8,-4,-3,0,2,4,5,8,9,10};
for(int i=0;i<arr.length;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]<arr[j]&&arr[i]+arr[j]==10)
{
System.out.println("("+arr[i]+","+arr[j]+")");
}
}
}
}
时间复杂度:O(n^2)
2.利用单指针进行二分查找
3.因为是有序数组,所以可以使用双指针来查找。(这是一种性价比较高的算法)
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
int[] arr= {-8,-4,-3,0,2,4,5,8,9,10};
int n=0,m=arr.length-1;
Scanner scan=new Scanner(System.in);
int k=scan.nextInt();
while(n<m)
{
if((arr[n]+arr[m])==k)
{
System.out.println("("+arr[n]+","+arr[m]+")");
n++;
m--;
}
else if((arr[n]+arr[m])<k)
{
n++;
}
else
{
m--;
}
}
}