从两数之和开启编程大门

2023-03-31  本文已影响0人  艺术类架构师

各位大神,你们好,力扣第一题是两数之和,其实这道题别看简单,但是是启蒙,出在第一题是合理的

能想到的解法是,暴力

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解决

方法七:多线程处理

方法八:分治思想

方法九转换为二进制累加

方法十 你的办法是?

上一篇下一篇

猜你喜欢

热点阅读