有两种方法可以选择:
第一种:暴力破解
第二种:使用HashMap
第一种:
首先想到的就是冒泡排序的方法,使用嵌套循环来求得解
第一层循环,为了取到数组中的每一个元素
第二层循环,为了和第一层取得的元素的下一个元素做比较
public static int[] twoSum(int[] nums,int target){
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if(nums[i] + nums[j] == target){
return new int[]{i,j};
}
}
}
return new int[]{-1};
}
以上代码虽然可以解决只存在一种结果的方式,如果有一种以上的结果时:
public class test_01 {
public static void main(String[] args) {
int[] nums=new int[]{1,2,3,4,5};
int a=6;
System.out.println(Arrays.toString(twoSum(nums,a)));
}
public static int[] twoSum(int[] nums,int target){
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if(nums[i] + nums[j] == target){
//return new int[]{i,j};
System.out.println("i="+i+","+"j="+j);
}
}
}
return new int[]{-1};
}
}
结果:
这样就可以打印出来多种结果。
第二种:使用HashMap
使用HashMap,主要是为了存储之前所遍历的结果,从而减少时间复杂度
public class test_01 {
public static void main(String[] args) {
int[] nums=new int[]{1,2,3,4,5};
int a=6;
System.out.println(Arrays.toString(twoSum(nums,a)));
}
public static int[] twoSum(int[] nums,int target){
int len=nums.length;
Map<Integer,Integer> hashMap=new HashMap<Integer, Integer>(len-1);
hashMap.put(nums[0],0);
for (int i = 1; i < len; i++) {
if(hashMap.containsKey(target-nums[i])){
System.out.println("第一个下标为:"+i+" 值为:"+nums[i]+" 第二个下标为"+hashMap.get(target-nums[i])+" 值为:"+nums[hashMap.get(target-nums[i])]);
}
hashMap.put(nums[i],i);
}
return new int[]{-1};
}
}
首先是使用hashMap去存储下标为0,第一个元素
从下标为1,第二个元素开始遍历,
hashMap.containsKey(target-nums[i]),这句代码是判断是否在之前存储的hashMap中存在和当前num[i]这个元素相加,等于target 的元素
如果结果为true,代表当前正在遍历的元素和之前的元素匹配等于target的值,输出结果
如果当前取得的元素不满足这个条件,意味着没有与当前元素匹配,将其放入hashMap中,等待后面的元素是否有与之对应的。
版权声明:本文为m0_58181298原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。