小工具知识网

当前位置: 首页 > 行业知识 > 【力扣】两数之和,暴力枚举 + 哈希表

行业知识

【力扣】两数之和,暴力枚举 + 哈希表

2026-10-31 16:25:31 来源:互联网转载

两���之和原题地址

方法一:暴力枚举

首先,我们需要枚举数组中所有可能的下标对组合,对于 n 个数的数组,从中选两个下标,有  种可能。做法很简单,遍历数组中的所有元素,对于每一个元素,遍历该元素后面的所有元素即可。

比如,对于 4 个元素的数组,下标是 0~3 ,所有可能的组合就是:(0,1),(0,2),(0,3),(1,2),(1,3),(2,3) ,总共有  种可能。

0 1 2 3^ ^^   ^^     ^  ^ ^  ^   ^    ^ ^
// 方法一:暴力枚举class Solution{public:    vector twoSum(vector& nums, int target)    {        // 暴力枚举        for (int i = 0; i  

方法二:哈希表

暴力枚举的方法时间效率太低了,最坏的情况要把任意两个数都匹配一次。我们可以考虑把数组中的元素都存储到哈希表中,遍历数组中的元素,查找哈希表中是否有元素和数组中的元素匹配。

再具体一点,对于数组中的某一个元素,如果哈希表中有与之匹配的元素,就找到了符合题目要求的答案;如果没有元素与之匹配,就把这个元素存储在哈希表中。这样的话,对于数组中的每一个元素,只需要 O(1) 的时间复杂度就能匹配完,效率大大提升了。

C++ 中,需要使用 unordered_map ,而不是 unordered_set ,因为最终要返回的是数组的下标,所以要把数组的元素和对应的下标都存储到哈希表中。

// 方法二:哈希表class Solution{public:    vector twoSum(vector& nums, int target)    {        unordered_map um;        for (int i = 0; i second };            }            // 存入哈希表            um[nums[i]] = i;        }        return {};    }};

上一篇:页面怎么设计?

下一篇:Android 使用AIDL HAL