21xrx.com
2024-11-23 03:21:11 Saturday
登录
文章检索 我的文章 写文章
——C++实现
2023-06-08 17:40:13 深夜i     --     --

题目描述

给定一个整数数组nums和一个目标值target,在数组中找出和为目标值的两个数。

假设每个输入只对应一种答案,且不能使用同一个元素两次。

返回数组中两个元素的下标,使它们相加的和等于目标值。

实现原理

1.暴力法

最简单的方法是使用两个嵌套的循环,以便遍历每个元素,并查找与其和相等的任何元素。

时间复杂度:O(n^2)

空间复杂度:O(1)

2.哈希表

将每个元素插入哈希表中,并在插入之前检查表中是否已存在当前元素的互补项。

时间复杂度:O(n)

空间复杂度:O(n)

代码解释

(1)暴力法

class Solution {

public:

vector

for(int i=0; i<nums.size()-1; i++){

for(int j=i+1; j<nums.size(); j++){

if(nums[i] + nums[j] == target)

return vector

}

}

return vector

}

};

(2)哈希表

class Solution {

public:

vector

unordered_map

for(int i=0; i<nums.size(); i++){

if(hashmap.find(target-nums[i]) != hashmap.end())

return vector

hashmap[nums[i]] = i;

}

return vector

}

};

代码解释:

这段代码使用了STL库中的unordered_map(哈希表)。

哈希表中存储了数组中的数和它对应的下标。

在第一次遍历数组时,将目标值减去当前数得到它应当配对的数,搜索哈希表中是否有这个配对数,如果有则返回哈希表中该数的下标和当前数的下标。

整个实现的思路很简单,但在实际开发中确实有很大的用处,因为它可以降低算法的时间复杂度,提高程序的效率。

总结

通过实现上述两种算法,我们可以发现哈希表算法比暴力法要快得多,尤其是当数组很大或目标值很小时。因此,在实际应用中,我们更加倾向于使用哈希表方法来解决这类问题。

到此,我们就成功地完成了"两数之和的C++实现"。

题目名称:两数之和

时间复杂度:O(n)

空间复杂度:O(n)

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复