- 做者:陳大魚頭
- 項目地址:ying-leetcode
- 碎碎念:Mmmmm,不按期刷leetcode,會以JS TS PY的形式輸出出來
給定一個整數數組 nums 和一個目標值 target,javascript
請你在該數組中找出和爲目標值的那 兩個 整數,java
並返回他們的數組下標。python
你能夠假設每種輸入只會對應一個答案。git
可是,你不能重複利用這個數組中一樣的元素。github
給定 nums = [2, 7, 11, 15], target = 9,typescript
由於 nums[0] + nums[1] = 2 + 7 = 9,數組
因此返回 [0, 1]微信
看到題目第一時間想到的就是冒泡,可是既然是正經刷LeetCode,寫個冒泡就有點尷尬了,那麼有沒有時間複雜度低一點的計算方式呢?想了一下就選擇了HASH的方式,思路就是定義一個保存數據的對象,而後循環查詢數組,而後要作的一點固然就是將當前循環到的數字當成鍵,地址當成值,插入對象中,而後計算當前目標結果與當前數字的差,再判斷這個差是否是已經在對象裏,若是在,就說明這兩個就是結果,遂輸出,否則就繼續循環。ui
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
const twoSum = (nums, target) => {
const obj = {}
for (let i = 0, len = nums.length; i < len; ++i) {
const data = nums[i]
const res = target - data
if (res in obj) {
return [obj[res], i]
}
obj[data] = i
}
}
複製代碼
interface objType {
[propName: string]: number
}
/** * @param {number[]} nums * @param {number} target * @return {number[]} */
const twoSum = (nums: number[], target: number): number[] | undefined => {
const obj: objType = {}
for (let i: number = 0, len: number = nums.length; i < len; ++i) {
const data: number = nums[i]
const res: number = target - data
if (res in obj) {
return [obj[res], i]
}
obj[data] = i
}
}
複製代碼
class Solution:
""" :type arg1: List[int] :param nums: :type arg2: int :param target: :rtype: (List[int], None) :return: """
def twoSum(self, nums: List[int], target: int) -> (List[int], None):
obj = {}
for i, data in enumerate(nums):
res = target - data
if res in obj:
return [obj[res], i]
obj[data] = i
return None
複製代碼
若是你、喜歡探討技術,或者對本文有任何的意見或建議,你能夠掃描下方二維碼,關注微信公衆號「 魚頭的Web海洋 」,隨時與魚頭互動。歡迎!衷心但願能夠碰見你。spa