算法题:找出数组中两个数相加起来的和是指定的一个数,并且返回对应的数组下标

  • Post author:
  • Post category:其他


有两种方法可以选择:

第一种:暴力破解

第二种:使用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 版权协议,转载请附上原文出处链接和本声明。