算法题:2sum,3sum
参考回答:
2sum: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,vector<int>> mark; for(int i=0;i<nums.size();i++) mark[nums[i]].push_back(i); for(int i = 0;i<nums.size();i++){ if(target-nums[i] == nums[i]){ if(mark[nums[i]].size() > 1){ vector<int> tmp{i,mark[nums[i]][1]}; return tmp; } }else{ if(mark.find(target-nums[i]) != mark.end()){ vector<int> tmp{i,mark[target-nums[i]][0]}; return tmp; } } } } 3sum: void two_sum(vector<int>& nums,int i,int target,vector<vector<int>> &result){ int j = nums.size()-1; int b = i-1; while(i<j){ if(nums[i]+nums[j] == target){ result.push_back(vector<int>{nums[b],nums[i],nums[j]}); i++; j--; while(i<j && nums[i] == nums[i-1]) i++; while(i<j && nums[j+1] == nums[j]) j--; }else{ if(nums[i]+nums[j] < target) i++; else j--; } } return; } vector<vector<int>> threeSum(vector<int>& nums) { set<vector<int>> result; vector<vector<int>> result2; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size();i++) if(i>0&&nums[i-1]== nums[i]) continue; else two_sum(nums,i+1,-nums[i],result2); return result2; }