
✅ 方法一:暴力枚举(时间复杂度 O(n²))
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ans;int size = nums.size();for (int i = 0; i < size; ++i){for (int j = i + 1; j < size; ++j){if (nums[i] + nums[j] == target){ans.push_back(i); ans.push_back(j); return ans; }}}return ans; }
};
✅ 方法二:哈希表优化(时间复杂度 O(n))
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> dic; for (int i = 0; i < nums.size(); ++i) {int complement = target - nums[i]; if (dic.count(complement)) {return {dic[complement], i};}dic[nums[i]] = i;}return {}; }
};
📌 总结对比:
方法 | 时间复杂度 | 空间复杂度 | 优点 | 缺点 |
---|
暴力法 | O(n²) | O(1) | 简单直接 | 效率低,适合小数据 |
哈希表法 | O(n) | O(n) | 高效 | 占用额外空间 |