給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那
兩個
整數,並返回他們的數組下標。javascript
你能夠假設每種輸入只會對應一個答案。可是,你不能重複利用這個數組中一樣的元素。前端
nums[i] + nums[j] === target
時返回 [i, j]
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
var twoSum = function(nums, target) {
const len = nums.length
for (let i = 0; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
if (nums[i] + nums[j] === target) {
return [i, j]
}
}
}
}
複製代碼
O(n^2)
O(1)
target - nums[i]
和 i
的值存放在 哈希表
中,target - nums[i]
對應 i
nums
數組,找到一個存在於 哈希表
中的 nums[i]
,即找到兩個數字之和等於 target
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
var twoSum = function(nums, target) {
const map = new Map()
for (let i = 0; i < nums.length; i++) {
map.set(target - nums[i], i)
}
for (let i = 0; i < nums.length; i++) {
const ans = map.get(nums[i])
if (ans && ans !== i) {
return [ i, map.get(nums[i]) ]
}
}
}
複製代碼
其實這裏還能把循環優化成爲一個,代碼以下🌰:java
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
var twoSum = function(nums, target) {
const map = new Map()
for (let i = 0; i < nums.length; i++) {
const ans = target - nums[i]
if (map.has(ans)) {
return [ i, map.get(ans) ]
}
map.set(nums[i], i)
}
}
複製代碼
O(n)
O(n)
一直在 LeetCode 上刷題,以前還加入了組織,有興趣加入一塊兒學習的同窗能夠在下方留言或者關注個人微信公衆號「tony老師的前端補習班」並在後臺留言,能夠進羣跟大佬們一塊兒學習。 git