《LeetBook》LeetCode题解(1) : Two Sum[E]——哈希Map的应用
来源:互联网 发布:lol挂机软件2017 编辑:程序博客网 时间:2024/06/09 15:03
001.Two Sum[E]
- Two SumE
- 题目
- 思路
- 1双重循环
- 2 排序
- 3 Hashmap
1.题目
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.
Example:
Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
2.思路
2.1双重循环
最简单的思路,两重循环,没啥技术含量,速度很慢,毕竟是
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; for(int i = 0;i < nums.size();i++) { for(int j = i+1;j < nums.size();j++) if(nums[i] + nums[j] == target) { result.push_back(i); result.push_back(j); return result; } } }};
2.2 排序
其实简单的想,用一个排序都能把复杂度降到
(下面代码是 dugu9sword写的java代码,我就没写成c++的,主要看思路,还是比较好理解的)
public class Solution { public int[] twoSum(int[] nums, int target) { int[] nums_sorted=new int[nums.length]; System.arraycopy(nums,0,nums_sorted,0,nums.length); //Quicksort. Arrays.sort(nums_sorted); //Find the two numbers. O(n) int start=0; int end=nums_sorted.length; while(start<end){ while(nums_sorted[start]+nums_sorted[--end]>target); if(nums_sorted[end]+nums_sorted[start]==target) break; while(nums_sorted[++start]+nums_sorted[end]<target); if(nums_sorted[end]+nums_sorted[start]==target) break; } //find the indices of the two numbers int[] ret=new int[2]; int index=0; int a=nums_sorted[start]; int b=nums_sorted[end]; for(int i=0;i<nums.length;i++) if(nums[i]==a || nums[i]==b) ret[index++]=i; return ret; }}
2.3 Hashmap
最后一种是比较聪明的做法,用hashmap,hashmap是内部存储方式为哈希表的map结构,哈希表可以达到查找O(1),哈希表的介绍可以看这里, C++实现Hashmap的方式,这里用unordered_map关联容器,可以实现键值对应。
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; unordered_map<int,int> mymap; int res; for(int i = 0;i < nums.size();i++) { res = target - nums[i]; unordered_map<int,int>::iterator it = mymap.find(res); if(it != mymap.end()) { return vector<int>({it->second,i}); } mymap[nums[i]] = i; } }};
0 0
- 《LeetBook》LeetCode题解(1) : Two Sum[E]——哈希Map的应用
- 《LeetBook》leetcode题解(7): Reverse Integer[E]——处理溢出的技巧
- 《LeetBook》leetcode题解(8): String to Integer (atoi) [E]——正负号处理
- 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
- 《LeetBook》leetcode题解(6): ZigZag Conversion[E]
- 《LeetBook》leetcode题解(15):3Sum[M]
- 《LeetBook》leetcode题解(18) : 4Sum[M]
- LeetCode – Two Sum (Java) —题解
- 《LeetBook》leetcode题解(4): Median of Two Sorted Arrays[H]——两个有序数组中值问题
- LeetCode 1 Two Sum 题解
- LeetCode 1 Two Sum题解
- LeetCode题解(1)--Two Sum
- LeetCode题解-1-Two Sum
- 《LeetBook》LeetCode题解(2):Add Two Numbers [M]
- 《LeetBook》leetcode题解(13):Roman to Integer[E]
- 《LeetBook》leetcode题解(14):Longest Common Prefix[E]
- 《LeetBook》leetcode题解(16):3Sum Closest [M]
- android 编译OTA升级包介绍
- Java clone() 浅克隆与深度克隆
- 装饰设计模式与代理设计模式的异同
- Geohash距离估算 附近的人的距离
- uestc599最小花费【单调队列优化dp】
- 《LeetBook》LeetCode题解(1) : Two Sum[E]——哈希Map的应用
- yii2.0高级框架配置时init.bat秒退问题的解决
- FZU 2112 Tickets(欧拉路径)
- JavaScript DOM 编程之基础篇
- Storm集群搭建
- 【转】gdb程序调试工具使用简介
- 2000年清华大学计算机研究生机试真题
- C118套装分享
- Linux 中如何安装卸载软件