1.两数之和【测试岗常见算法题】

题目

1. 两数之和---频率10次

给定1个整数数组,找目标值(2个数的和),返回其下标。

注意:数组中可存在重复的数字。

测试用例:
输入:nums = [3,3], target = 6
输出:[0,1]
输入:nums = [3,2,4], target = 6
输出:[1,2]
输入:nums = [2,7,11,15], target = 9
输出:[0,1]

思路

哈希表

将数组存在HashMap里,然后循环1次数组,计算后去找字典里的目标值。 O(n)
注意数组中重复的值,需要将i和index(map)进行对比,确定不是同一个值才进行返回。

哈希表法适合频繁去list里找某一个值的情况,将多次遍历list,变为去map里面查找,从而降低时间复杂度。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> numsMap = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if(numsMap.containsKey(target - nums[i])){
                int index = numsMap.get(target - nums[i]);
                if (index != i){
                    //说明不是同一个值
                    return new int[]{i, index};
                }
            }
            numsMap.put(nums[i], i);
        }
        return new int[]{};
    }
}
posted @ 2021-04-13 11:51  火颜  阅读(200)  评论(0)    收藏  举报