算法题一(给定一个整数数组和一个目标值,请你在该数组中找出和为目标值的那两个整数的索引)

之前朋友面试遇到的一道题,说是给定一个整数数组和一个目标值,请你在该数组中找出和为目标值的那两个整数的索引,而且只能用一次循环。当时我就想在遍历的时候保存它的差值,然后和后面的数字作比较。但是内会儿只是有思路,没写出来,今天抽时间用代码实现了,话不多说,直接上代码。

    public static int[] twoSum(int[] arrays, int target) {
        Map<Integer, Integer> map = new HashMap<>();//创建一个map
        for (int i = 0; i < arrays.length; i++) {
            int cha = target-arrays[i];
            if (map.containsKey(cha)){//拿插值和map中的键比较,会返回boolean值
                return new int [] {map.get(cha),i};//如果条件满足,意味着找到数字了,通过get(key)方法获得value。也就是该数字的下标
            }
            map.put(arrays[i],i);//保存到map中,数字作为键,下标作为值
        }

        throw new IllegalArgumentException("没有找到!!!");
    }

猜你喜欢

转载自www.cnblogs.com/super-hu/p/12163798.html