一個失敗的例子。
上 LeetCode 去練習程式邏輯,人家說所謂的 bug 就是思考上的缺陷。有時候方法能解,但是思考角度不對,其實就會在測試中出現問題。
下面的例子是給定一個陣列,真一個目標,找尋是否陣列裡有一對元素,相加等於目標數字。
在這個例子中,當如果輸入兩個不同數字,結果正確。但如果兩個數字相同,就會出現錯誤。
var nums = [3,3]
var target = 6
var twoSum = function(nums, target) {
for (var i = 1; i < target ; i++)
if (nums.indexOf(i) + 1 && nums.indexOf(target - i) + 1) {
return [nums.indexOf(i), nums.indexOf(target - i)]
} else {
if( i == target - 1) {
return console.log("Sorry")
}
}
};
而正確的作法應該要用兩個迴圈。以下為pseudocode,明天再繼續挑戰不同題目。
public int[] twoSum(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 };
}
}
}
throw new IllegalArgumentException("No two sum solution");
}