兩數求和(leetcode題庫)
阿新 • • 發佈:2022-03-20
題目:
給定一個整數陣列 nums 和一個整數目標值 target,請你在該陣列中找出 和為目標值 target 的那 兩個 整數,並返回它們的陣列下標。
你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素在答案裡不能重複出現。
你可以按任意順序返回答案。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:
輸入:nums = [3,3], target = 6
輸出:[0,1]
來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/two-sum
解答過程:
-
通過題目可得,我們需要從一個數組找出兩個數字來相加,首先我想到了用暴力列舉法
-
運用兩個巢狀的for迴圈來獲得結果
第一次嘗試,程式碼如下所示:
public static int[] twoSum(int[] nums, int target) {
for (int i = 0; i <nums.length ; i++) { // 第一層for 從陣列中取出一個值nums[i]
for (intj = 0; j < nums.length; j++) { //第二層for 從陣列中再取出一個值為nums[k]
if(nums[i]+nums[j]==target) //判斷nums[i]+nums[k]是否與target相等
{
System.out.println("["+i+","+j+"]");
return new int[]{i,j}; //如果存在nums[i]+nums[k]相等則返回一個新陣列
}
}
}
return new int[0];//如果不存在則返回一個空陣列
}
錯誤:
這裡嘗試輸入一個數組為{1,2,3}要求他們想加的值為6,因為不存在所以應該返回一個空陣列。但是通過執行發現返回了一個數組為【2,2】
這裡發現我們重複使用了數字,這裡修改if語句中的判斷語句為:
if(nums[i]+nums[j]==target&&i!=j) //判斷nums[i]+nums[k]是否與target相等並且判斷i和j不相等
結論: