LeetCode-167-兩數(shù)之和 II - 輸入有序數(shù)組

題目描述:給定一個(gè)已按照 升序排列 ?的整數(shù)數(shù)組 numbers ,請(qǐng)你從數(shù)組中找出兩個(gè)數(shù)滿足相加之和等于目標(biāo)數(shù) target 。
函數(shù)應(yīng)該以長(zhǎng)度為 2 的整數(shù)數(shù)組的形式返回這兩個(gè)數(shù)的下標(biāo)值。numbers 的下標(biāo) 從 1 開(kāi)始計(jì)數(shù) ,所以答案數(shù)組應(yīng)當(dāng)滿足 1 <= answer[0] < answer[1] <= numbers.length 。
你可以假設(shè)每個(gè)輸入只對(duì)應(yīng)唯一的答案,而且你不可以重復(fù)使用相同的元素。
示例說(shuō)明請(qǐng)見(jiàn)LeetCode官網(wǎng)。
??
鏈接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/ ??
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
解法一:二分查找
首先,如果數(shù)組numbers只有2個(gè)數(shù)字,直接判斷是否滿足并返回結(jié)果;
如果numbers的長(zhǎng)度大于2,則用二分查找的方式解決。
首先,固定第一個(gè)數(shù)字的位置first,first從第一位開(kāi)始,然后用二分查找法從數(shù)字的
first+1
位到數(shù)字的最后一位,查找數(shù)字target - numbers[first]
是否存在,如果存在,則返回結(jié)果;如果不存在,則將first后移一位,重新查找,直到first移動(dòng)到數(shù)字的倒數(shù)第二位,最后如果沒(méi)有找到符合條件的結(jié)果,返回null。
【每日寄語(yǔ)】 你一定要站在自己所熱愛(ài)的世界里,閃閃發(fā)亮。