5.11【leetcode刷题】1.两数之和

54 阅读1分钟

最普通的解法是两层循环,把整个数组遍历两次。

public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for (int i = 0; i < nums.size(); i++) {
            for (int j = nums.size() - 1; j < nums.size(); j--) {
                if (i != j) {
                    if (target == nums[i] + nums[j]) {
                        return {i, j};
                    }
                }
            }
        }
        return{};
    }
};

时间复杂度O(n²),空间复杂度O(1)

更好的解法是建立哈希表,以空间换时间

public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hashtable;
        for (int i = 0; i < nums.size(); ++i) {
            auto it = hashtable.find(target - nums[i]);
            if (it != hashtable.end()) {
                return {it->second, i};
            }
            hashtable[nums[i]] = i;
        }
        return {};
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/two-sum/solutions/434597/liang-shu-zhi-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间复杂度O(n),空间复杂度O(n)