算法总结之 不重复打印排序数组中相加和为给定值的所有二元数组
给定一个排序数组arr 和整数 k, 在里面找到所相加为k的二元数组。
思路: 充分利用有序呀
二元数组嘛 可以两个指针 一个 left 一个right 不断向中间压缩
看看和与k的关系 然后移动相应的指针
package TT; public class Test68 { public static void printUniquePair(int[] arr, int k){ if(arr==null || arr.length < 2){ return; } int left=0; int right = arr.length-1; while(left<right){ if(arr[left]+arr[right]<k){ left++; }else if(arr[left]+arr[right]>k){ right--; }else{ if(left==0 || arr[left-1] !=arr[left]){ //第一个没啥 后面的主要是 防止重复 比如 arr[1]==arr[2] 和是 num 那么会有重复的打印出来 其实我想到的
//还有一个策略是 放到set中 这样的话 可以存储起来而不是打印出来 System.out.println(arr[left]+","+arr[right]); } left++; right--; } } } public static void main(String[] args){ int[] arr = new int[10]; arr[0] = -8; arr[1] = -4; arr[2] = -3; arr[3] = 0; arr[4] = 1; arr[5] = 2; arr[6] = 4; arr[7] = 5; arr[8] = 8; arr[9] = 9; int k = 10; printUniquePair(arr, k); } }