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

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

给定一个排序数组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 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值