Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
const twoSum = (nums, target) => {
let num_1, num_2;
let numbers = [];
for(let i = 0; i < nums.length; i++) {
num_1 = nums[i];
num_2 = target - num_1;
if(numbers.indexOf(num_2) !== -1) {
return [numbers.indexOf(num_2), i];
} else {
numbers[i] = num_1;
}
}
};
今天是第四天啦~結束了字串 String
篇,接下來三天主題是陣列 Array
!
既然是 Array
第一天,當然就要先從最簡單的題目開始囉,所以今天來解 LeetCode
題庫第一題 1. Two Sum,
題目是給一個陣列和一個數字,數字會是這個陣列裡的某兩個數字的總和,答案就是這兩個數字在陣列的位置,看他給的範例就能秒懂了~
這題用到最基本的 Array
,沒有什麼花俏的演算法,所以請輕鬆服用即可!
num_1
跟 num_2
分別代表目前數字跟需求數字,numbers[]
則是用來存已經掃過的數字。let num_1, num_2;
let numbers = [];
步驟 2.
最外層的 for
loop 就是一個一個掃過去陣列,
然後將 num_1
存目前的數字,num_2
是 num_1
跟 target
的差距,
因為題目要我們找兩個數字的總和,所以思路是:
存一個目前的數字,找之前掃過的數字中有沒有剛好加起來是 target
的數字,如果有的話那很好,直接 return [numbers.indexOf(num_2), i];
,就是答案需要的 [位置1, 位置2]
!
但不幸如果找不到的話,也沒什麼,就存在 numbers[]
裡就好,以備未來不實之用!
完成!
備註:indexOf()
的用法,就是在 Array
中找出指定東西的位置,是不是非常好用呢~~
for(let i = 0; i < nums.length; i++) {
num_1 = nums[i];
num_2 = target - num_1;
if(numbers.indexOf(num_2) !== -1) {
return [numbers.indexOf(num_2), i];
} else {
numbers[i] = num_1;
}
}