LeetCode 1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

LeetCode 1. 两数之和_第1张图片

最简单暴力的第一种 直接两个循环一套 然后把下标传到新的数组 最后返回数组 时间复杂度在 O(n2)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] arr = new int[2];
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target){
                   arr[0] = i;
                   arr[1] = j;
                }
            }
        }
        return arr;
    }
}

哈希查找的时间复杂度为 O(n)

    public int[] twoSum(int[] nums, int target) {
        //新建一个哈希表
        HashMap<Integer, Integer> hashTable = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            //如果在哈希表中有(target - nums[i])这个键 就返回数组
            if(hashTable.containsKey(target - nums[i])){
                //数组里面是 键为target - nums[i]的值 和 当前下标
                return new int[]{hashTable.get(target - nums[i]),i};
            }
            //如果没有 就把当前值设为键 下标为值 存入哈希表中
            hashTable.put(nums[i],i);
        }
        return new int[0];
    }

你可能感兴趣的:(java学习,leetcode,算法,数据结构)