題目描述:
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。
示例:給定 nums = [2, 7, 11, 15], target = 9
返回 [0, 1]
思路1:
第一層for迴圈從索引0到倒數第二個索引拿到每個陣列元素,第二個for迴圈遍歷上一層for迴圈拿到的元素的後面的所有元素。
具體**:
1 public class solution
16 }
18 }
19 return null;
21 }
23 }
思路2:
兩次雜湊表法:第一次迴圈,建立陣列中值和索引的字典;第二次迴圈,從字典中找出target-num對應值。
為了對執行時間複雜度進行優化,我們需要一種更有效的方法來檢查陣列中是否存在目標元素。如果存在,我們需要找出它的索引。保持陣列中的每個元素與其索引相互對應的最好方法是什麼?雜湊表。
通過以空間換取速度的方式,我們可以將查詢時間從 o(n)o(n) 降低到 o(1)o(1)。雜湊表正是為此目的而構建的,它支援以 近似恆定的時間進行快速查詢。我用「近似」來描述,是因為一旦出現衝突,查詢用時可能會退化到 o(n)o(n)。但只要你仔細地挑選雜湊函式,在雜湊表中進行查詢的用時應當被攤銷為 o(1)o(1)。
乙個簡單的實現使用了兩次迭代。在第一次迭代中,我們將每個元素的值和它的索引新增到表中。然後,在第二次迭代中,我們將檢查每個元素所對應的目標元素(target - nums[i]target−nums[i])是否存在於表中。注意,該目標元素不能是 nums[i]nums[i]本身!
public int twosum(int nums, int target)
for (int i = 0; i < nums.length; i++) ;}}
throw new illegalargumentexception("no two sum solution");
}
思路3:
**一次雜湊表法:**在建立陣列中值和索引的字典時,返回去檢查是否存在當前元素所對應的元素。在進行迭代並將元素插入到表中的同時,我們還會回過頭來檢查表中是否已經存在當前元素所對應的目標元素。如果它存在,那我們已經找到了對應解,並立即將其返回。
public int twosum(int nums, int target) ;
}map.put(nums[i], i);
}throw new illegalargumentexception("no two sum solution");
}
兩數之和等於目標值
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數,將這兩個數通過另乙個陣列返回。可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9,所以返回 0,1 第一種方法 使用兩層for...
二分查詢 目標值的最小下標和目標值的最大下標
1.我們使用的退出迴圈的條件為l r 2.找到目標值的最小下標,將大於和等於合併成為一種情況 a mid target,答案的下標存在與l 如果只有乙個target值的話,l存的就是唯一target值的下標 3.找到目標值的最大下標,將小於和等於合併成為一種情況 a mid target,答案的下標...
返回等於目標值的數
給出乙個整數陣列,請在陣列中找出兩個加起來等於目標值的數,你給出的函式twosum 需要返回這兩個數字的下標 index1,index2 需要滿足 index1 小於index2.注意 下標是從1開始的 假設給出的陣列中只存在唯一解 例如 給出的陣列為 目標值為90 輸出 index1 1,inde...