**Dễ**
Cho một mảng các số nguyên `nums` và một số nguyên `target`, trả về _các chỉ số của hai số sao cho tổng của chúng bằng_ `target`.
Bạn có thể giả định rằng mỗi input sẽ có **_chính xác_ một lời giải**, và bạn không được sử dụng cùng một phần tử hai lần.
Bạn có thể trả về câu trả lời theo bất kỳ thứ tự nào.
**Ví dụ 1:**
Đầu vào: nums = [2,7,11,15], target = 9
Đầu ra: [0,1]
Giải thích: Vì nums[0] + nums[1] == 9, chúng ta trả về [0, 1].
**Ví dụ 2:**
Đầu vào: nums = [3,2,4], target = 6
Đầu ra: [1,2]
**Ví dụ 3:**
Đầu vào: nums = [3,3], target = 6
Đầu ra: [0,1]
**Ràng buộc:**
* `2 <= nums.length <= 104`
* `-109 <= nums[i] <= 109`
* `-109 <= target <= 109`
* **Chỉ tồn tại duy nhất một câu trả lời đúng.**
**Thêm:** Bạn có thể đưa ra thuật toán có độ phức tạp thời gian nhỏ hơn O(n^2) không?
Code Javascript:
function twoSum(arr, n) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if(n - arr[j] === arr[i]) {
return [i, j];
}
}
}
}
function twoSum(nums, target) {
const hashMap = {};
for(let i = 0; i < nums.length; i++) {
const num = nums[i];
if(hashMap[target - num] !== undefined) {
return [i, hashMap[target - num]];
}
hashMap[num] = i;
}
}