各位大神,你们好,力扣第一题是两数之和,其实这道题别看简单,但是是启蒙,出在第一题是合理的
能想到的解法是,暴力
for(a in nums)
for(b in nums)
if(nums[a]+nums[b]==target and a!=b)
return 结果
解法二排序+双指针
sort(nums.begin(),nums.end())
int i=0,b=nums.size()-1;
do{
if(nums[i]+nums[j]<target){
i++;
}
if(nums[i]+nums[j]>target){
j--;}
else 返回结果
}
while(i<j)
解法三 排序加二分法
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++){
int j=binary_search(target-nums[i]);
if(j!=-1)返回结果
}
解法四 hash表
set<int> set;
for(auto d:nums){
if(set.find(target-d)!=set.end())
return {d,target-d}};
set.add(d);
}
方法五 拆分target为两数之和,然后再从数组里去映射,这属于穷举了
int a=0,b=0;
for(a=-1000000000;a<=target/2;a++){
b=target-a;
}
方法六 ChatGPT解决
方法七:多线程处理
方法八:分治思想
方法九转换为二进制累加
方法十 你的办法是?