給定整數數組和目標值 target,找出兩個數使其和等於 target,返回其下標(1-based),假設唯一解。
遍歷數組,對於每個元素 x,檢查 target-x 是否已在哈希表中。若在,直接返回;否則將 x 存入哈希表。時間 O(n),空間 O(n)。
class Solution {
public:
vector twoSum(vector& nums, int target) {
unordered_map map; // 值 -> 下標
for (int i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
if (map.count(complement)) {
return {map[complement] + 1, i + 1}; // 1-based
}
map[nums[i]] = i;
}
return {}; // 題目保證有解
}
};
若數組已排序,可用左右指針 O(n) 時間 O(1) 空間。但本題數組無序,哈希表最優。