问题描述:
样例输入:
代码如下:(1)暴力破解
(2)双指针解决
import java.util.LinkedList;
import java.util.List;
public class tenth {
//给定已排序数组arr和k,不重复打印arr中所有相加和为k的不降序二元组
//暴力破解
public static List<List<Integer>> solve(int[] arr,int k){
List<List<Integer>> list=new LinkedList<>();
for (int i = 0; i <arr.length ; i++) {
for (int j = i+1; j <arr.length ; j++) {
if (arr[i]+arr[j]==k){
List<Integer> list1=new LinkedList<>();
list1.add(arr[i]);
list1.add(arr[j]);
list.add(list1);
}
}
}
return list;
}
public static List<List<Integer>> solve1(int[] arr,int k){
List<List<Integer>> list=new LinkedList<>();
int st=0;
int end=arr.length-1;
while (st<end){
if (arr[st]+arr[end]>k){
end--;
}else if (arr[st]+arr[end]<k){
st++;
}else{
List<Integer> list1=new LinkedList<>();
list1.add(arr[st]);
list1.add(arr[end]);
list.add(list1);
st++;
end--;
}
}
return list;
}
public static void main(String[] args) {
int[] arr={-8,-4,-3,0,2,4,5,8,9,10};
int k=7;
List<List<Integer>> list=solve(arr,k);
List<List<Integer>> list1=solve1(arr,k);
System.out.println(list.toString());
System.out.println("-----------");
System.out.println(list1.toString());
}
}
结果如下: