国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Javascript – Bitte erl?utern Sie den folgenden Algorithmuscode
習(xí)慣沉默
習(xí)慣沉默 2017-07-05 10:41:45
0
1
1072

Dies ist der Code zu diesem Algorithmus, implementiert in Javascript, aber ich verstehe den folgenden Algorithmus nicht. Bitten Sie Gott um eine Erkl?rung.

var twoSum = function(nums, target) {
    var ret = [];
    var exist = {};
    for(var i = 0; i < nums.length; i++){
        if(typeof(exist[target - nums[i]]) !== 'undefined'){
            ret.push(exist[target - nums[i]]);
            ret.push(i + 1);
        }
        
        exist[nums[i]] = i + 1;
    }
    
    return ret
};
習(xí)慣沉默
習(xí)慣沉默

Antworte allen(1)
淡淡煙草味

題主可以試著用例子代入進(jìn)去走讀一遍代碼。下面是我的見(jiàn)解:

比如就按截圖里的例子:

for循環(huán)里主要是遍歷第一個(gè)參數(shù)數(shù)組,然后它做的關(guān)鍵兩個(gè)步驟:

我們先看if后面那個(gè), exist[nums[i]] = i + 1; 這句是每個(gè)循環(huán)都會(huì)執(zhí)行的,exist在這里是字典的意思,比如遍歷第一個(gè)數(shù)是2(i=0),于是exist就保存了:{2:1} 這樣的鍵值對(duì),所以一遍循環(huán)下來(lái),exist將會(huì)是:
數(shù)組反過(guò)來(lái),“元素值”:"數(shù)組索引+1"的鍵值對(duì)字典。

接下來(lái),再去看if里面的判斷,當(dāng)然for循環(huán)i=0時(shí),exist還沒(méi)有注入鍵值對(duì),if表達(dá)式為false

但到了i=1的時(shí)候 exist[target-nums[1]] 即exist[9-7] = exist[2], 這不就是剛才i=0的時(shí)候,就注入exist的第一個(gè)鍵值對(duì)么?于是乎,把對(duì)應(yīng)的鍵值對(duì)的值(其實(shí)就是原數(shù)值的在原來(lái)數(shù)組的索引+1)存檔ret去,接著又把當(dāng)前的 i+1 也存到ret……最后循環(huán)走完,返回ret,于是得到了[1,2] ps:題主給的例子答案跟代碼的不一致。

總結(jié):這個(gè)算法核心就是利用的對(duì)象exist來(lái)存已遍歷過(guò)的數(shù)組元素,利用target-nums[i] 反過(guò)來(lái)間接通過(guò)exist來(lái)查找數(shù)組已遍歷過(guò)的元素是否存在符合條件的元素。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage