做网站需要什么文件/百度推广计划
一、题目
二、测试代码
class Solution {public int[] twoSum(int[] nums, int target) {int[] b=new int[2];//提前设置一个新数组用于存放数组下标,大小为2是因为每次返回都是两个整数for(int i=0;i<nums.length;i++){for(int j=0;j<nums.length;j++){if(i!=j&&nums[i]+nums[j]==target)//对数组进行双重循环遍历,将下标分别存入新数组中{b[0]=j;b[1]=i;}}}return b;//返回数组类型}
}
三、运行情况
四、代码改进
使用哈希表,可以将寻找 target - x 的时间复杂度降低到从 O(n) 降低到 O(1)。我们可以创建一个哈希表,对于每一个 x,首先查询哈希表中是否存在 target - x,若不存在即可将 x 插入到哈希表中,即可保证不会让 x 和自己匹配,若存在即可将其输出。原理示意图和代码如下:
class Solution {public int[] twoSum(int[] nums, int target) {HashMap<Integer,Integer> hash=new HashMap<>();hash.put(nums[0],0);//先将数组的第一个key=nums[0]和value=0存入哈希表中,则遍历从1开始for(int i=1;i<nums.length;i++){if(hash.containsKey(target-nums[i]))//哈希表中所含有的containsKey(Object key)方法,返回值为boolean,用于判断当前哈希表中是否包含key对应的key-value,{return new int[]{hash.get(target-nums[i]),i};//若哈希表有target-nums[i],则new一个数组输出}hash.put(nums[i],i);//若哈希表没有target-nums[i],则将其放入哈希表中}throw new IllegalArgumentException("No two sum solution");//IllegalArgumentException表明向方法返回了一个不合法或者不正确的参数,即抛出异常}
}
四、刷题总结
HashMap不能使用基本数据类型,Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。在HashMap中通过get()来获取value,通过put()来插入value,ContainsKey()则用来检验对象是否已经存在。