#167 Two Sum II - Input array is sorted (有圖)
用 Two pointer 方向想會比單純用 Array Method 效能好很多
Given an array of integers that is already sorted in ascending order, 
find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, 
where index1 must be less than index2.
Note:
Your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution and you may not use the same element twice.
inpput: 給一數字陣列跟 target 數字
output: 找出哪兩個 index 的值相加等於 target, index1 一定比 index 2 前面Example:
Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
 /**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(num, target) {}怎麼解

Two pointer 直接翻譯就是兩個指針(廢話),以這題來說就是 pointer 跟 ind,我們來想一下題目,題目說已經按照大小排好了
- num[pointer] + num[ind] < targer,兩個總和若太小則 pointer ++,讓他總和變大 

- num[pointer] + num[ind] > targer,兩個總和若太大 ind -- ,讓他總和變小 

var twoSum = function(numbers, target) {
    let pointer = 0;
    let len = numbers.length
    let ind = len - 1
 
    while( target !== numbers[ind] + numbers[pointer]){
        target > numbers[ind] + numbers[pointer] ? pointer ++ : ind --;
    }
       
    return [pointer+1, ind+1];
    
    let L = 0
    let R = numbers.length - 1
    while(L<R){
        if(numbers[L] + numbers[R] === target){
          return [L+1, R+1]    
        }
        
        if(target-numbers[L] < numbers[R]){
            R--
        } else {
            L++
        }
    }
    
    return [-1, -1]
};Last updated
Was this helpful?