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

本文介绍了一种高效算法,用于找出排序数组中所有相加等于特定目标值的二元组。通过双指针技术避免了重复计算,并确保了算法的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

给定一个排序数组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 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值