給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target奈梳,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù)藏古,并返回它們的數(shù)組下標(biāo)渤闷。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是后雷,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。
你可以按任意順序返回答案蔓钟。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因?yàn)?nums[0] + nums[1] == 9 磺箕,返回 [0, 1] 。
示例 2:
輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:
輸入:nums = [3,3], target = 6
輸出:[0,1]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只會(huì)存在一個(gè)有效答案
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/two-sum
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有扮宠。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)西乖,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
/**
解題思路
1、采用雙指針方法
指向數(shù)組第一個(gè)下標(biāo)和指向數(shù)組第二個(gè)下標(biāo)進(jìn)行遍歷 看所相加和是否是目標(biāo)值 如果是返回相應(yīng)下標(biāo) 如果不是循環(huán)遍歷
*/
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
if nums.count == 0{
return []
}
for i in 0..<nums.count {
for j in i+1..<nums.count {
if nums[i] + nums[j] == target {
return [i,j]
}
}
}
return []
}
/**
解題思路
1获雕、采用雙指針方法
指向數(shù)組第一個(gè)下標(biāo)和指向數(shù)組第二個(gè)下標(biāo)進(jìn)行遍歷 看所相加和是否是目標(biāo)值 如果是返回相應(yīng)下標(biāo) 如果不是循環(huán)遍歷
2薄腻、添加mapdict 來緩存遍歷過數(shù)據(jù) 減少重復(fù)遍歷
*/
func twoSum1(_ nums: [Int], _ target: Int) -> [Int] {
if nums.count == 0{
return []
}
var mapDict = Dictionary<Int, Int>()
for i in 0..<nums.count {
if (mapDict[target - nums[i]] != nil){
let index:Int = mapDict[target - nums[i]] ?? 0
return [index,i]
}else{
mapDict[nums[i]] = i
}
}
return []
}