LeetCode1. 两数之和

一、题目描述

二、解法

class Solution {
    public int[] twoSum(int[] nums, int target) {
        /**
         * 方法1:暴力枚举。
         *      时间复杂度O(n^2),空间复杂度O(1)
         */
        /*for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    return new int[]{i,j};
                }
            }
        }
        return new int[]{-1,-1};*/
        /**
         * 方法2:哈希表
         *      时间复杂度O(n),空间复杂度O(n)
         *  注意先判断,再存入。否则出现 [3,2,4] 6 返回[0,0]的情况,即当前元素使用了两次。
         */
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target - nums[i])) {
                return new int[]{map.get(target-nums[i]), i};
            }
            map.put(nums[i], i);
        }
        return new int[]{-1,-1};
    }
}

 

posted @ 2020-12-10 21:38  不学无墅_NKer  阅读(76)  评论(0编辑  收藏  举报