摘要:解法返回目錄解題代碼執(zhí)行測試解題思路使用雙重循環(huán)破解。解法返回目錄解題代碼執(zhí)行測試知識點遍歷數(shù)組,返回遍歷項,返回當(dāng)前索引。
Create by jsliang on 2019-05-16 22:19:13
Recently revised in 2019-05-17 14:22:40
Hello 小伙伴們,如果覺得本文還不錯,記得給個 star , 小伙伴們的 star 是我持續(xù)更新的動力!GitHub 地址
LeetCode 攻略地址
一 目錄不折騰的前端,和咸魚有什么區(qū)別
目錄 |
---|
一 目錄 |
二 前言 |
三 解題 |
?3.1 解法 - for() |
?3.2 解法 - indexOf() |
?3.3 解法 - Map |
返回目錄
難度:簡單
涉及知識:數(shù)組、哈希表
題目地址:leetcode-cn.com/problems/tw…
題目內(nèi)容:
給定一個整數(shù)數(shù)組 nums 和一個目標值 target,請你在該數(shù)組中找出和為目標值的那 兩個 整數(shù),并返回他們的數(shù)組下標。 你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,你不能重復(fù)利用這個數(shù)組中同樣的元素。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]三 解題
返回目錄
官方題解:leetcode-cn.com/problems/tw…
解題千千萬,官方獨一家,上面是官方使用 Java 進行的題解。
小伙伴可以先自己在本地嘗試解題,再看看官方解題,最后再回來看看 jsliang 講解下使用 JavaScript 的解題思路。
3.1 解法 - for()返回目錄
解題代碼:
var twoSum = function(nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[j] === target - nums[i]) {
return [i, j];
}
}
}
};
執(zhí)行測試:
nums:[1, 3, 2, 5, 6]
target: 8
return:
[1, 3]
解題思路:使用雙重 for 循環(huán)破解。
第一遍過濾 nums 數(shù)組,標記為 i。
第二遍再次過濾 nums 數(shù)組,標記為 i + 1,因為我們是對數(shù)組中的兩個數(shù)字相加,所以不能重復(fù)使用同一個數(shù)字。
判斷第二次遍歷的數(shù)字中,它是否等于 target - nums[i],如果成立就返回兩個數(shù)字的索引。(并不考慮后面還有可成立的答案)。
返回目錄
解題代碼:
var twoSum = function(nums, target) {
let result = [];
nums.map((item, index) => {
if (nums.indexOf(target - item) > -1 && nums.indexOf(target - item) != index) {
result = [index, nums.indexOf(target - item)].sort((a, b) => a > b);
}
});
return result;
};
執(zhí)行測試:
nums:[4, 3, 2, 5, 6]
target: 8
return:
[2, 4]
知識點:
map():遍歷數(shù)組,item 返回遍歷項,index 返回當(dāng)前索引。map() 詳細介紹
indexOf():判斷數(shù)組中是否存在判斷條件中的值。如果存在,則返回第一次出現(xiàn)的索引;如果不存在,則返回 -1。indexOf() 詳細介紹
sort():排序,保持返回數(shù)組的數(shù)字為順序排列。sort() 詳細介紹
解題思路:
首先,我們開辟一塊內(nèi)存 result。
然后,我們通過 map() 遍歷 nums,并使用 indexOf() 尋找除當(dāng)前 item 的 index 之外和 item 相加之和為 target 的結(jié)果。
最后,我們返回查找的最新結(jié)果,該結(jié)果進行了排序([4, 2] 的返回通過 sort() 排序變成 [2, 4])
例如,在上面測試 twoSum([1, 3, 2, 5, 6], 8) 的結(jié)果就有:
[1, 3]
[2, 4]
[3, 1]
[4, 2]
我們?nèi)∽詈笠淮蔚慕Y(jié)果并排序返回,即:[2, 4]
進一步思考:如果我們將 map() 換成 for(),你知道該如何操作么?
3.3 解法 - Map返回目錄
解題代碼:
var twoSum = function(nums, target) {
let map = new Map();
for (let i = 0; i < nums.length; i++) {
if (map.has(nums[i])) {
return [map.get(nums[i]), i];
} else {
map.set(target - nums[i], i);
}
}
};
執(zhí)行測試:
nums:[4, 3, 2, 5, 6]
target: 8
return:
[1, 3]
知識點:
Map:保存鍵值對。任何值(對象或者原始值) 都可以作為一個鍵或一個值。Map 詳細介紹
解題思路:
首先,我們需要了解 Map 這個對象。
它可以通過 set() 的形式,以 [key, value] 的形式保存一組數(shù)據(jù)。(題目中對應(yīng) key 就是存入的 target - nums[i] 值,value 就是索引)
它可以通過 get() 的形式,獲取到傳入 key 值對應(yīng)的 value。
它可以通過 has() 的形式,判斷 Map 對象里面是否存儲了傳入 key 對應(yīng)的 value。
然后,我們遍歷 nums 數(shù)組。
最后,我們判斷 nums[i] 是否存在于 Map 對象中。沒有的話,就存入 target - nums[i] 到 Map 中。有的話,因為上次存入的是 target- nums[i],有點類似于解題的鑰匙,既然我們看到 nums[i] 存在于 Map 中,它是解題的鑰匙,所以我們只需要返回 [map.get(nums[i]), i] 這組值即可。
jsliang 廣告推送:
也許小伙伴想了解下云服務(wù)器
或者小伙伴想買一臺云服務(wù)器
或者小伙伴需要續(xù)費云服務(wù)器
歡迎點擊 云服務(wù)器推廣 查看!
jsliang 的文檔庫 由 梁峻榮 采用 知識共享 署名-非商業(yè)性使用-相同方式共享 4.0 國際 許可協(xié)議進行許可。
基于github.com/LiangJunron…上的作品創(chuàng)作。
本許可協(xié)議授權(quán)之外的使用權(quán)限可以從 creativecommons.org/licenses/by… 處獲得。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/7282.html
摘要:微信公眾號記錄截圖記錄截圖目前關(guān)于這塊算法與數(shù)據(jù)結(jié)構(gòu)的安排前。已攻略返回目錄目前已攻略篇文章。會根據(jù)題解以及留言內(nèi)容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...
摘要:兩數(shù)之和問題各變種多解法小結(jié)聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處兩數(shù)之和等于題目大意給出未排序數(shù)組和指定目標,返回數(shù)組中兩數(shù)之和的組合元素下標要求下標從開始,而且,保證題目中有且只有個可行解解法暴力時間復(fù)雜度求解解題思路暴力二重循環(huán)求解 兩數(shù)之和問題各變種多解法小結(jié) 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處:[1] https://segmentfault.com/u/yzwal...
摘要:題意給定一個整數(shù)數(shù)組和一個目標值,請你在該數(shù)組中找出和為目標值的那兩個整數(shù),并返回他們的數(shù)組下標。也就是說,字典里記錄的是每個數(shù)據(jù)希望找到的另一半的值的大小。返回這兩個下標就行,如果沒有存在于字典里,那么繼續(xù)存入字典。 showImg(https://segmentfault.com/img/bVbvgPA); 題意: 給定一個整數(shù)數(shù)組 nums 和一個目標值 target,請你在該數(shù)...
閱讀 1135·2021-10-09 09:43
閱讀 18652·2021-09-22 15:52
閱讀 1077·2019-08-30 15:44
閱讀 3071·2019-08-30 15:44
閱讀 3260·2019-08-26 14:07
閱讀 922·2019-08-26 13:55
閱讀 2581·2019-08-26 13:41
閱讀 3103·2019-08-26 13:29