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
相关推荐
KaMeidebaby5 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发8Qi86 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)bIo7lyA8v6 小时前
算法稳定性分析中的随机扰动建模的技术8sugar__salt6 小时前
从栈队列数据结构到JS原型面向对象全解科研online7 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异Cthy_hy7 小时前
拓扑排序超详解:原理 + Kahn 贪心算法三品吉他手会点灯8 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍VkN2X2X4b8 小时前
算法复杂度的实验验证与误差分析的技术8其利天下技术8 小时前
风扇灯无刷电机自适应算法实战指南8Qi88 小时前
LeetCode 494:目标和(Target Sum)—— 题解 ✅