LeetCode題解兩數之和(三種方法)

2021-10-23 03:20:43 字數 1584 閱讀 9425

題目:給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。

題目分析:題中會給出乙個nums整數陣列和乙個target值,在陣列中找到2個數之和等於target並返回他們的下標,但是這2個數不能為同乙個元素。比如nums :[1,2,3,4],target:6,陣列中2和4的和等於6,所以返回陣列中2,4的下標,就是 1,3。

解法一:暴力求解法

通過第一次遍歷陣列指定第乙個數,在子遍歷一遍陣列找到第二數,把他們求和,如果等於target就返回他們的下標。反之繼續遍歷,直到找到這2個下標。

public

int[

]twosum

(int

nums,

int target);}

}}return null;

}

解法二:對於有序陣列前後掃瞄對於乙個有序陣列我們將2個指標分別放在11陣列的首端和尾端,將這2個指標指向的值相加如果等於target就返回2個指標的下標,如果大於那麼右指標就先前走一步,如果小於,左指標就向前走一步。

如圖:

public

int[

]twosum

(int

nums,

int target)

//左指標

int left =0;

//右指標

int right = nums.length-1;

//遍歷陣列

while

(left < right)

//小於目標值左指標右移

else

if(nums[left]

+ nums[right]

< target)

else;}

}return null;

}

注意:如果是無序陣列經過排序之後使用此方法得到的答案是錯誤的,因為排序之後值的下標已經發生了改變。解法三:使用hashmaphashmap存放的是鍵和值,乙個鍵對應乙個值,所以我們可以用乙個hashmap,遍歷一次數值完成。首先我們從頭開始遍歷陣列,拿到陣列的值的時候。就可以從hashmap中找出有沒有和等於target鍵,如果有則返回,如果沒有就把這個值和他的下標作為鍵和值插入到hashmap中。一次遍歷陣列即可找到目標值。

如圖:

public

int[

]twosum

(int

nums,

int target);}

else

}return null;

}

leetcode 兩數之和 題解

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 第一次看到這個題目,有點懵逼,因為以前沒做過什麼題目,...

LeetCode 題解 1 兩數之和

力扣 leetcode 已認證的官方帳號 關注他 15 人贊同了該文章 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 ...

leetcode題解 1 兩數之和

兩數之和 link 1.題目分析1.為了以o n 的時間複雜度完成尋找,那麼只能是遍歷一遍或者多遍,而且在每個位置操作的時間複雜度是常數時間。2.逆向思維,把找兩個數轉換成 longrightarrow 檢視每個數是否有與其相加之和滿足條件的數 3.為了在常數時間內完成匹配查詢,可以先遍歷一遍預處理...