Timeline
Timeline
2025-11-13
init
Problem:
Sorting + Two Pointers
12345678910111213141516171819202122232425262728293031323334353637383940 | using std::vector;using std::unordered_map;class Solution { public: vector<int> twoSum(vector<int> &nums, int target) { unordered_map<int, vector<int> > num2index; int i, n = nums.size(); for (int i = 0; i < n; i++) { if (!num2index.count(nums[i])) { num2index[nums[i]] = vector<int>(); } num2index[nums[i]].push_back(i); } std::sort(nums.begin(), nums.end()); int left = 0, right = n - 1; while (left < right) { if (nums[left] + nums[right] < target) { left++; } else if (nums[left] + nums[right] > target) { right--; } else { break; } } vector<int> res; if (nums[left] == nums[right]) { res = { num2index[nums[left]][0], num2index[nums[right]][1] }; } else { res = { num2index[nums[left]].front(), num2index[nums[right]].front() }; } return res; }}; |
Hash Table Two Pass
1234567891011121314151617181920212223242526272829303132333435363738 | using std::vector;using std::unordered_map;class Solution { public: vector<int> twoSum(vector<int> &nums, int target) { int i, n = nums.size(); int curr; unordered_map<int, vector<int> > num2idx; vector<int> ret; for (i = 0; i < n; i++) { num2idx[nums[i]].push_back(i); } for (i = 0; i < n; i++) { curr = target - nums[i]; if (num2idx.count(curr)) { if (curr == nums[i]) { if (num2idx[nums[i]].size() >= 2) { ret.push_back(num2idx[nums[i]].front()); ret.push_back(num2idx[curr].back()); return ret; } else { continue; } } else { ret.push_back(num2idx[nums[i]].front()); ret.push_back(num2idx[curr].front()); return ret; } } } return ret; }}; |
Hash Table One Pass
1234567891011121314151617181920212223242526 | using std::vector;using std::unordered_map;class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> seen; int need; for (int i = 0; i < nums.size(); ++i) { need = target - nums[i]; if (seen.count(need)) return {seen[need], i}; seen[nums[i]] = i; } return {}; }}; |
