查找总结为S的所有nos

shr*_*sva 12 algorithm

给定一个数组,找到总和到给定值的所有nos对.有一种经典的O(n)算法,在前后保持2个指针,使它们更接近找到对.这只会导致1对.如果你想要所有配对怎么办?额外奖励:找到最小距离对.

你能在O(n)中做到这一点.

Ant*_*ima 9

 int arr[SIZE]; /* sorted in ascending order */

 int a = 0, b = SIZE - 1, mindist = -1, sum;
 while (a < b) {
    sum = arr[a] + arr[b];
    if (sum == TARGET) { report_pair(a, b); mindist = b - a; a++ }
    else if (sum < TARGET) a++;
    else b--;
 }

 /* minimum distance stored in mindist */
Run Code Online (Sandbox Code Playgroud)


Gop*_*pal 2

public static void main(String[] args) {
        int[] nums = new int[] { 1,2,3,4,5,6,7,8,9};
        Hashtable  reqNoList=new Hashtable();
        int sum=6;
        int minPair=0,i=0,count=0;
        // just remove the second condition for unsorted array
        while(i<nums.length && i<sum){
            int key=sum-nums[i];
            if(reqNoList.containsKey(nums[i])){
                Integer temp=(Integer) reqNoList.get(nums[i]);
                System.out.println("("+key+","+nums[i]+")");
                if(count==0)
                    minPair=i-temp;
                else if((i-temp)< minPair)
                    minPair=i-temp;
                count++;
            }else
                reqNoList.put(key,i);
            i++;
        }
        System.out.println("min Distance -->"+minPair);
    }
Run Code Online (Sandbox Code Playgroud)