提高LeetCode刷題效率的方法分享
題目1:兩數(shù)之和(Two Sum)LeetCode刷題是程序員面試準(zhǔn)備中常見(jiàn)的一部分,能幫助我們熟悉各種算法、數(shù)據(jù)結(jié)構(gòu),并為面試做好準(zhǔn)備。在LeetCode題庫(kù)中,題目1是非常經(jīng)典的一道題目,即Tw
題目1:兩數(shù)之和(Two Sum)
LeetCode刷題是程序員面試準(zhǔn)備中常見(jiàn)的一部分,能幫助我們熟悉各種算法、數(shù)據(jù)結(jié)構(gòu),并為面試做好準(zhǔn)備。在LeetCode題庫(kù)中,題目1是非常經(jīng)典的一道題目,即Two Sum。題目要求給定一個(gè)整數(shù)數(shù)組和一個(gè)目標(biāo)值,找出數(shù)組中和為目標(biāo)值的兩個(gè)數(shù),并返回它們的索引。其中,第一個(gè)索引必須小于第二個(gè)索引。假設(shè)每個(gè)輸入只有一個(gè)解。
解法1:排序加二分查找
為了解決這個(gè)問(wèn)題,我們可以采用排序算法結(jié)合二分查找來(lái)實(shí)現(xiàn)。首先,我們對(duì)原始數(shù)組進(jìn)行排序,然后使用雙指針?lè)ǎ粋€(gè)指向數(shù)組開(kāi)頭,一個(gè)指向數(shù)組末尾,不斷逼近目標(biāo)值。如果找到兩個(gè)數(shù)的和等于目標(biāo)值,則記錄它們的索引并返回結(jié)果。
```java
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] arr (numbers, numbers.length);
int[] result new int[2];
(numbers);
int i0;
int j numbers.length-1;
while(i < j){
if((numbers[i] numbers[j]) > target){
j--;
} else if((numbers[i] numbers[j]) < target){
i ;
} else {
int temp1 numbers[i];
int temp2 numbers[j];
int index1 0, index2 0;
boolean flag1 true;
boolean flag2 true;
for(int k0; k if(flag1){ if(arr[k] temp1){ index1 k; flag1 false; continue; } } if(flag2){ if(arr[k] temp2){ index2 k; flag2 false; continue; } } } if(index1 < index2){ result[0] index1; result[1] index2; } else { result[0] index2; result[1] index1; } break; } } return result; } } ``` 解法2:利用HashMap映射表 另一種高效的解法是利用HashMap來(lái)建立數(shù)值與索引的映射關(guān)系。我們遍歷數(shù)組,在建立映射關(guān)系的同時(shí),尋找當(dāng)前數(shù)字對(duì)應(yīng)的另一個(gè)數(shù)字是否已經(jīng)存在于HashMap中。如果找到匹配的數(shù)字,即可得到結(jié)果。 ```java public class Solution { public int[] twoSum(int[] numbers, int target) { HashMap for(int i0; i map.put(numbers[i], i); } int[] result new int[2]; for(int i0; i int waitCal target - numbers[i]; if((waitCal) ! null (waitCal) > i){ result[0] i; result[1] (waitCal); break; } } return result; } } ``` 通過(guò)以上兩種解法,我們可以在不同場(chǎng)景下選擇合適的方法來(lái)解決問(wèn)題,提高LeetCode刷題的效率,同時(shí)增強(qiáng)對(duì)各種算法思想的理解。持續(xù)刷題,保持學(xué)習(xí),才能在面試中游刃有余地解決各類算法問(wèn)題。