1. Two Sum
2018-06-17 21:28:17来源:未知 阅读 ()
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
Solution 1:
使用暴力破解方法,先循环数组中的元素,针对每一个元素,再次遍历数组,查看数组中是否含有响应的补元素,一次算法复杂度为O(n2),C++代码如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int component; vector<int> index; for (int i = 0; i < nums.size(); i++){ component = target - nums[i]; for (int j = i + 1; j < nums.size(); j++){ if (nums[j] == component){ index.push_back(i); index.push_back(); return index; } } } } };
Solution2:
我们在第二个循环中遍历所有的元素来查找是否有component,这个循环的复杂度为O(n),如果我们有办法将该查找的复杂度变为O(1),则整个算法的复杂度将会变为O(1),因此我们采用哈希表(hashmap)来存储元素,进行查找,hashmap的平均查找时间为O(1)。此算法的空间复杂度为O(n),时间复杂度为O(n),C++代码如下所示:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> namemap; vector<int> index; for (int i = 0; i < nums.size(); i++){ if (namemap.find(target - nums[i]) != namemap.end()){ //在map中存在匹配的元素 index.push_back(namemap[target - nums[i]]); index.push_back(i); return index; } namemap[nums[i]] = i; } } };
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:【递归与递推】新汉诺塔
- CodeForces 710D Two Arithmetic Progressions 2020-03-06
- Max Sum 2020-02-17
- bzoj3944 Sum 2019-12-25
- Ural 1248 Sequence Sum 题解 2019-08-16
- DP_Sumsets 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash