題目
給定一個已按照升序排列 的有序數(shù)組猖毫,找到兩個數(shù)使得它們相加之和等于目標數(shù)台谍。
函數(shù)應該返回這兩個下標值 index1 和 index2,其中 index1 必須小于 index2吁断。
說明:
返回的下標值(index1 和 index2)不是從零開始的趁蕊。
你可以假設每個輸入只對應唯一的答案,而且你不可以重復使用相同的元素仔役。
示例:
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]解釋: 2 與 7 之和等于目標數(shù) 9 掷伙。因此 index1 = 1, index2 = 2 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
著作權歸領扣網(wǎng)絡所有又兵。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權任柜,非商業(yè)轉(zhuǎn)載請注明出處。
解題思路
- 首先定義一個變量m沛厨,n宙地,分別記錄數(shù)組的起始下標、末尾下標值逆皮。
- 再進行while循環(huán)宅粥,因為該數(shù)組是升序排序的有序數(shù)組,所以當起始下標小于末尾下標(不可以使用重復的元素)時進行while循環(huán)电谣。
- 當兩個數(shù)的和等于目標值target的時候秽梅,我們將這兩個數(shù)的下標加1按照順序放入一個數(shù)組中進行輸出,得到結(jié)果辰企。
- 當兩個數(shù)的和小于目標值target的時候风纠,m++,進行下一次循環(huán)判斷牢贸。
- 當兩個數(shù)的和大于目標值target的時候竹观,n++,進行下一次循環(huán)判斷潜索。
- 以此類推臭增,最后當這兩個數(shù)和為目標值target的時候,跳出循環(huán)竹习,并將這兩個數(shù)的下標加1按照順序放入一個數(shù)組中進行輸出誊抛,得到結(jié)果。
代碼
var twoSum = function (numbers, target) {
let m = 0; n= numbers.length - 1;
while (m < n) {
if (numbers[m] + numbers[n] === target) {
let res = [m + 1, n + 1];
return res;
} else if (numbers[m] + numbers[n] < target) {
m++;
} else {
n--;
}
}
};