cppclass Solution { public: map<int,int>m; vector<int> twoSum(vector<int>& nums, int target) { for(int i=0;i<nums.size();i++) { m[nums[i]]=i; } sort(nums.begin(),nums.end()); for(int i=0;i<nums.size();i++) { int l=0,r=nums.size()-1; while(l<r) { int mid=l+r>>1; if(nums[mid]>=target-nums[i])r=mid; else l=mid+1; } if(nums[i]==target-nums[l]){ // cout<<m[target-nums[l]]<<endl<<target-nums[l]<<endl; return {m[nums[i]],m[nums[l]]}; } } return{}; } };当然可以两个循环遍历,上面我用的map+二分,发现如果元素重复的话就错误了,这里直接写一个findd函数代替找一下就好了:
cppclass Solution { public: map<int,int>m; int findd(int x,vector<int>& nums,int l,int k) { for(int i=l;i<k;i++) { if(nums[i]==x) { return i; } } return -1e7; } vector<int> twoSum(vector<int>& nums, int target) { vector<int>copy(nums); sort(copy.begin(),copy.end()); int a,b; for(int i=0;i<copy.size();i++) { int k; int l=0,r=copy.size()-1; while(l<r) { int mid=l+r>>1; if(copy[mid]>=target-copy[i])r=mid; else l=mid+1; } if(copy[i]==target-copy[l]){ // cout<<m[target-nums[l]]<<endl<<target-nums[l]<<endl; a=findd(copy[i],nums,0,nums.size()); b=findd(copy[l],nums,a+1,nums.size()); if(b==-1e7) { b=findd(copy[l],nums,0,a); } return{a,b}; } } return{}; } };下面的双指针也可以:
cppclass Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>copy(nums); sort(copy.begin(),copy.end()); int l=0,r=nums.size()-1; while(l<r) { if(copy[l]+copy[r]>target)r--; if(copy[l]+copy[r]<target)l++; if(copy[l]+copy[r]==target)break; } // cout<<l<<" "<<r<<endl; vector<int>ans; for(int i=0;i<nums.size();i++) { if(nums[i]==copy[l]||nums[i]==copy[r])ans.push_back(i); } return ans; } };后来考虑了一下直接使用哈希表其实也可以做,代码如下:
cppclass Solution { public: map<int,int>m; vector<int> twoSum(vector<int>& nums, int target) { for(int i=1;i<nums.size();i++) { m[nums[0]]=0; if(m.count(target-nums[i])) { return {m[target-nums[i]],i}; } m[nums[i]]=i; } return {}; } };
leetcode-hot100-1.两数之和
丰海洋2026-02-18 9:44
相关推荐
三毛的二哥2 小时前
BEV:典型BEV算法总结南宫萧幕2 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型故事和你913 小时前
洛谷-数据结构1-4-图的基本应用1我叫黑大帅4 小时前
为什么map查找时间复杂度是O(1)?炽烈小老头4 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积skilllite作者5 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考破浪前行·吴5 小时前
数据结构概述py有趣6 小时前
力扣热门100题之不同路径_日拱一卒6 小时前
LeetCode:25K个一组翻转链表啊哦呃咦唔鱼6 小时前
LeetCodehot100-394 字符串解码