美文网首页剑指offer
42-和为S的两个数字-双指针

42-和为S的两个数字-双指针

作者: 马甲要掉了 | 来源:发表于2020-05-27 22:07 被阅读0次

    题目描述

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

    输出描述:

    对应每个测试案例,输出两个数,小的先输出。

    分析

    使用双指针。此外相距最远,乘积最小。

    代码

    function FindNumbersWithSum(array, sum) {
      if (array.length < 2) return [];
      let left = 0,
        right = array.length - 1;
      const res = [];
      while (left < right) {
        if (array[left] + array[right] < sum) {
          left++;
        } else if (array[left] + array[right] > sum) {
          right--;
        } else {
          res.push(array[left], array[right]);
          break;
        }
      }
      return res;
    }
    

    自己写的emmm

    function FindNumbersWithSum(array, sum)
    {
        let cc = sum *sum;
        let o1;
        let o2;
        // write code here
        for(let i=0;i<(array.length/2);i++){
            let j = array.indexOf(sum-array[i])
            if(j!=-1){
                let m = array[i];
                let n = array[j];
                if(cc>m*n){
                    cc = m*n; 
                    o1 = m;
                    o2 = n;
                }
                
    
            }
        }
        if(o1===undefined||o2===undefined){
            return [];
        }
        return [o1,o2]
    }
    
    
    

    2

    function FindNumbersWithSum(arr,s) {
     for(let i=0;i<arr.length;i++){
            let j = arr.indexOf(s-arr[i]);
            if(j!==-1){
                return [arr[i],arr[j]]
            }
        }
        return [];
    }
    

    相关文章

      网友评论

        本文标题:42-和为S的两个数字-双指针

        本文链接:https://www.haomeiwen.com/subject/epxnahtx.html