LeetCode题目解析(一):1、two sum
2018-03-10 11:17
369 查看
1、两数和
问题描述:
给定一个整数数组与一个目标数,从数组中找出两个数使得这两个数之和为目标数,返回他们的下标(假定答案唯一且一个数只能被使用一次)
问题分析:
这题表面上看需要遍历数组中两两之和,并与目标进行比较,需要O(n²)的时间复杂度。但我们只需要利用哈希表就可以将时间复杂度降到O(n)。
首先定义一个哈希表(即c++的map),把值作为key,把下标作为value,遍历数组,根据目标值减去数组值算出要找的值,访问map,若存在该值则将答案记录下来,若没有找到,则将该值-下标对加入到map中。
Ac code(c++):
下一篇:LeetCode题目解析(二):10、Regular Expression Matching
问题描述:
给定一个整数数组与一个目标数,从数组中找出两个数使得这两个数之和为目标数,返回他们的下标(假定答案唯一且一个数只能被使用一次)
问题分析:
这题表面上看需要遍历数组中两两之和,并与目标进行比较,需要O(n²)的时间复杂度。但我们只需要利用哈希表就可以将时间复杂度降到O(n)。
首先定义一个哈希表(即c++的map),把值作为key,把下标作为value,遍历数组,根据目标值减去数组值算出要找的值,访问map,若存在该值则将答案记录下来,若没有找到,则将该值-下标对加入到map中。
Ac code(c++):
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; map<int, int> hash; for (int i = 0; i < nums.size(); i++) { int NumberToFind = target - nums[i]; //计算要找的值 if (hash.find(NumberToFind) != hash.end()) { //从表中找到了要找的值 result.push_back(hash[NumberToFind]); result.push_back(i); } //将值-下标对添加到map中 hash[nums[i]] = i; } } return result; } };
下一篇:LeetCode题目解析(二):10、Regular Expression Matching
相关文章推荐
- 【leetcode】第10题 Regular Expression Matching 题目+解析+代码
- Leetcode题目分析 1.Two Sum
- 【leetcode】第55题 Jump Game 题目+解析+代码
- 【leetcode】第6题 ZigZag Conversion 题目+解析+代码
- 【leetcode】第20题 Valid Parentheses 题目+解析+代码
- LeetCode Online Judge 题目C# 练习 - Two Sum
- 【leetcode】第47题 Permutations II(非递归法)题目+解析+代码
- leetcode题目例题解析(五)
- LeetCode题目解析(二):10、Regular Expression Matching
- leetcode题目例题解析(十五)
- 【leetcode】第73题 Set Matrix Zeroes 题目+解析+JAVA代码
- 【python】【leetcode】【算法题目1—Two Sum】
- 【leetcode】第74题 Search a 2D Matrix 题目+解析+JAVA代码
- LeetCode 44.Wildcard Matching题目解析
- leetcode题目例题解析(十)
- 【leetcode】第66题 Plus One 题目+解析+JAVA代码
- 【leetcode】第75题 Sort Colors 题目+解析+JAVA代码
- LeetCode 769. Max Chunks to Make Sorted I题目解析
- LeetCode 37.Sudoku Solver题目解析
- LeetCode题目:1. Two Sum