leetcode 167 Two Sum II - Input array is sorted

題目描述:

題目截圖.png

思路:

  • 看到是升序的,就想可以使用二分查找,嗯,然后就使用了二分查找,可以通過,但是效率不高(122s)。

    var twoSum = function(numbers, target) {
    var result = [];
    var len = 0;
    while(numbers[len] <= target){
      len++
    }
    for(var i = 0; i <= len; i++){
        var s = numbers[i];
        var j = search(target-s, i+1, len, numbers);
        if(j != -1){
            result.push(i+1);
            result.push(j+1);
            return result;
        }
      }
    };
    
    var search = function(target, start, end, numbers){
    
    while(start <= end){
        var mid = parseInt((start+end)/2);
        if(numbers[mid] == target){
            return mid;
        }else if(numbers[mid] > target){
            end = mid-1;
        }else{
            start = mid+1;
        }
      }
    return -1;
    }
    
  • 看了大家的解題思路原來更簡單,從左右兩側使用兩個指針進行循環判斷就可以了。(95s)

    /**
     * @param {number[]} numbers
     * @param {number} target
     * @return {number[]}
     */
    var twoSum = function(numbers, target) {
        var result = [];
        var left = 0;
        var right = numbers.length-1;
    
        while(left <= right){
           if(numbers[left] + numbers[right] == target){
              result.push(left+1);
              result.push(right+1);
              return result;
          }else if(numbers[left] + numbers[right] > target){
              right--;
          }else{
              left++;
          }
        }
    };
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容