算法:給定一個數組和一個目標值,找出數組中和爲目標值的兩個數

給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

題目原地址:

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/29/

可以把寫好的代碼去這裡提交,驗證是否通過。

/**

* 首先想到的肯定是拿第一個元素與後面的依次加,看是否等於目標值,

* 然後再第二個、第三個...

*/

public int[] twoSum1(int[] nums, int target) {

for (int i = 0; i < nums.length; i++) {

for (int j = i + 1; j < nums.length; j++) {

if (nums[j] == target - nums[i]) {

return new int[] {i, j};

}

}

}

return new int[]{0,0};

}

/**

* 把數值作為 key,它的下標作為 value

* 遍歷數組,判斷 map 是否含有這個目標值-當前數值,

* 有直接返回,沒有的話放到map裡面

*

* 所以以後寫代碼,如果有雙層 for 循環,首先考慮一下能否用 map 替換一層

*/

public int[] twoSum2(int[] nums, int target) {

Map map = new HashMap<>();

for (int i = 0; i < nums.length; i++) {

if (map.containsKey(target - nums[i])) {

return new int[]{map.get(target - nums[i]),i};

}

map.put(nums[i], i);

}

return new int[]{0,0};

}

這個好像有點簡單


分享到:


相關文章: