【LeetCode】1. 兩數(shù)之和

LeetCode 題目地址:https://leetcode-cn.com/problems/two-sum/description/

題目

給定一個整數(shù)數(shù)組和一個目標(biāo)值,找出數(shù)組中和為目標(biāo)值的兩個數(shù)。

你可以假設(shè)每個輸入只對應(yīng)一種答案,且同樣的元素不能被重復(fù)利用。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

JavaScript:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {

};

解答

方法一

獲取一個元素之后,向后查找是否有與其相對應(yīng)的數(shù)字,如果沒有,找下一個元素。如果有,則返回。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let len = nums.length;
    for(let i = 0; i < len; i++) {
        for (let j = i + 1; j < len; j++) {
            if(nums[i] + nums[j] === target) {
                return [i,j];
                break;
            }
        }
    }
    return [];
}

方法二

獲取一個元素a,我們又知道了兩數(shù)之和target,所以我們可以通過target - a 的計(jì)算,得到我們要找的另外一個數(shù)字,這個時(shí)候我們在數(shù)組中查找就好。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let n;
    let x;
    let len = nums.length - 1;
    for(let i = 0; i < len; i++) {
        n = target - nums[i]; // 獲取滿足條件的另一個數(shù)字
        x = nums.indexOf(n, i + 1); // 在nums數(shù)組中的第 i+1個元素之后,查找是否存在n
        if(x > -1) {
            return [i, x];
        }
    }
    return [];
};

方法三

方法二 中的indexOf其實(shí)也算是遍歷了一遍數(shù)組,遍歷數(shù)組是很浪費(fèi)時(shí)間的,那么我們有沒有什么辦法可以快速的查找數(shù)據(jù)呢?

為了更快速的查找改元素,我們定義一個對象obj,將key定義為數(shù)組元素,value定義為該數(shù)組元素在數(shù)組中定義的下標(biāo),例如:

let nums = [2, 7, 11, 15];
將 nums 改寫成 obj
let obj = {
    "2" : 0,
    "7" : 1,
    "11" : 2,
    "15" : 3
}

假設(shè)我們要數(shù)字11在nums數(shù)組中所在的位置,只需obj["11"]即可獲取。

解題代碼如下:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let len = nums.length;
    let n = {};
    for(let i = 0; i < len; i++) {
        if (n[ target - nums[i] ] !== undefined){
            return [n[ target-nums[i] ], i];
        }
        n[ nums[i] ] = i;
    }
    return [];
};

轉(zhuǎn)載請注明:轉(zhuǎn)自尹小芃槑

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

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

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