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
相关推荐
没落之王30 分钟前
易学使者郑氏正脉郑冰推演马航事件阿部多瑞 ABU1 小时前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战郝学胜-神的一滴1 小时前
并查集深度入门:从玄学抽象到 QuickFind & QuickUnion 源码实战比奇堡裤头村1 小时前
统计学习方法——决策树灵晔君1 小时前
【Linux】进程控制(一)——进程创建、进程终止与进程等待数模竞赛Paid answer10 小时前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序银-豆豆10 小时前
数据结构与算法-动态规划、回溯与贪心想吃火锅100512 小时前
【leetcode】200. 岛屿数量hold?fish:palm12 小时前
24 回文链表Nil20813 小时前
leetcode 54螺旋矩阵