1. two-sum

作者: 不知名bzm | 来源:发表于2019-02-18 23:28 被阅读1次

本系列是自己刷 LeetCode (语言为:Java)的记录。解题思路不保证都是本人自己想到的,但是可以保证均为本人验证过并且是正确的解法。

题目:
给出一个整数数组,两个数相加满足指定数,返回这两个数在数组中的索引。
其他条件:
1.假定只有一个答案。2.同一项不能重复使用。

解法1:双循环,满足条件时返回循环的索引。注意:因为条件1,所以内循环从 i + 1 开始。

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};
        }
    }
}

该解法:时间复杂度为 O(n2)。

解法2:使用 HashMap(哈希表),将数组中的值作为key,值对应的 index 作为 value 放入map中。

Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++) {
    int complate = target - nums[i];
    if(map.containsKey(complate)) {
        return new int[]{i, map.get(complate)};
    }
    map.put(nums[i], i);
}

该解法:时间复杂度为 O(n)。

相关文章

网友评论

    本文标题:1. two-sum

    本文链接:https://www.haomeiwen.com/subject/dqdtyqtx.html