每日一題 -- 和為s的兩個(gè)數(shù)字

輸入一個(gè)遞增排序的數(shù)組和一個(gè)數(shù)字s,在數(shù)組中查找兩個(gè)數(shù),使得它們的和正好是s。如果有多對(duì)數(shù)字的和等于s,則輸出任意一對(duì)即可。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[2,7] 或者 [7,2]
示例 2:
輸入:nums = [10,26,30,31,47,60], target = 40
輸出:[10,30] 或者 [30,10]

解題思路:
1.由于數(shù)組是排好序且遞增的,先判斷數(shù)組元素個(gè)數(shù),小于2個(gè)的,直接返回空數(shù)組;
2.取出數(shù)組的第一個(gè)元素和最后一個(gè)元素,對(duì)兩個(gè)元素的和與目標(biāo)數(shù)字進(jìn)行大小比較,若兩數(shù)之和大于目標(biāo)元素,將最后一個(gè)元素位置向前移動(dòng)一位,再次進(jìn)行比較;若兩數(shù)之和小于目標(biāo)元素,則將第一個(gè)元素的位置向后移動(dòng)一位,再次比較;若相等,返回這兩個(gè)元素。
3.一直循環(huán)直到第一個(gè)元素位置大于最后一個(gè)元素位置

代碼:

    func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
        if nums.count < 2 {
            return []
        }
        var first = 0
        var last = nums.count-1
        while first < last {
            let sum = nums[first]+nums[last]
            if sum > target {
                last = last - 1
            }else if sum < target {
                first = first + 1
            }else {
                return [nums[first],nums[last]]
            }
        }
        return []
    }

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容