算法总结之 不重复打印排序数组中相加和为给定值的所有二元数组

给定一个排序数组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); } }

 

posted @ 2017-09-07 10:30  toov5  阅读(410)  评论(0编辑  收藏  举报