1.排序双指针
先排序
sort(nums.begin(),nums.end());
在双指针查找
while(left<right){ if(nums[left]+nums[right]<k){ left++; }else if(nums[left]+nums[right]>k){ right--; }else{ left++; right--; count++; } }
2.哈希表
记录vector值出现的次数
unordered_map<int ,int >freq;//记录vector值出现的次数 for(int num:nums){ ++freq[num]; }
值刚好为目标值一半的做特殊处理
for(auto [key,value]:freq){ if(key*2==k){ ans+=value/2;//向下取整 }else if(key*2<k]&&freq.count(k-key)){//也可以计算key*2>k,目的是避免重复计算 ans+=min(value,freq[k-key); } }
标签:right,nums,++,value,1679,key,freq,leetcode From: https://www.cnblogs.com/wangkaixin-yy/p/17385646.html