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
相关推荐
tangguofeng1 小时前
基于分治策略的循环赛日程表问题的思路讲解hnjzsyjyj2 小时前
洛谷 P1339:[USACO09OCT] Heat Wave G ← Bellman-Ford 算法起个名字费劲死了2 小时前
VisionMaster集成深度学习算法(基础狗)lengxuenong2 小时前
枚举例题分析Navigator_Z2 小时前
LeetCode //C - 1269. Number of Ways to Stay in the Same Place After Some Steps2601_965742222 小时前
短视频脚本创作方法分享:本地生活类账号的起步思路55873生态系统手记2 小时前
读完 55873 资产钱包的技术栈,我重新理解了 "合规钱包" 应该长什么样旋生万物2 小时前
素数螺旋映射 $z_n=n^{1+i}$ 的角分布统计检验与零模型对比HRTOS2 小时前
HRTOS Shell继续完善:优化printf缓冲区与字符串越界保护,国庆后随新版本更新邵奈一3 小时前
当沉香之乡遇上 Seed-2.1-pro:我用 AI 给村子做了一个数字门面