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