竹笋

首页 » 问答 » 环境 » 每日一个小算法之两数之和
TUhjnbcbe - 2023/11/7 20:27:00
白癜风患者QQ群 http://www.guanxxg.com/news/roll/1569098.html

每日一个小算法之两数之和

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

本文出自凯哥Java(kaigejava)

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定nums=[2,7,11,15],target=9

因为nums[0]+nums[1]=2+7=9

所以返回[0,1].

这个题目是不是很简单啊。

首先,我们想到的第一种方案就是for循环。嵌套循环。如下:

JAVA代码:

publicstaticvoidmain(String[]args){Integer[]nums=newInteger[]{1,2,0,5,7,9,3};Integertarget=5;Integer[]returnNums=twoSum(nums,target);System.out.println(JSON.toJSONString(returnNums));}publicstaticInteger[]twoSum(Integer[]nums,Integertarget){Integer[]returnNums=newInteger[2];for(inti=0;inums.length;i++){for(intj=i+1;jnums.length;j++){intnum1=nums;intnum2=nums[j];if((num1+num2)==target){returnNums[0]=i;returnNums[1]=j;returnreturnNums;}}}returnreturnNums;}

运行结果:

执行结果是出来了。我们看看执行时间:

是不是很low的一种方法。

那么接下来,我们看看第二中算法:

第二种算法和巧妙。Java代码如下:

privateInteger[]twoSum2(Integer[]nums,Integertarget){Integer[]indexs=newInteger[2];//建立k-v,一一对应的哈希表HashMapInteger,Integerhash=newHashMapInteger,Integer();for(inti=0;inums.length;i++){if(hash.containsKey(nums)){indexs[0]=i;indexs[1]=hash.get(nums);log.info(JSON.toJSONString(hash));returnindexs;}//将数据存入key为补数,value为下标hash.put(target-nums,i);log.info(==:{},i=:{},target-nums:{},nums,i,target-nums);}returnindexs;}

其中巧妙的地方:

再来看看运行结果:

看看两个算法对比:

再速度上是不是快了很多。

欢迎大家留下更好的算法。一起学习,一起成长

1