[LeetCode] #1# Two Sum : 数组/哈希表/二分查找/双指针
1. Two Sum
Total Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy
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].
UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.
- 给定一个数组和一个目标值
- 找出数组中两个成员,两者之和为目标值
- 假设一定存在一个解
三. 分析
- 算法核心:
- 三种方法:
- 暴力搜索: O(n^2): 超时
- 哈希表: O(n)
- 先快排, 后二分查找: O(nlogn) + O(nlogn)
- 先快排, 后使用双指针分别指向数组头和尾,同时双向遍历数组: O(nlogn) + O(n)
- 三种方法:
- 实现细节:
- 算法逻辑相对简单
- 实现细节相对容易
四. 题解
- 哈希表
- 实现
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int, int> m; for (int i = ; i < nums.size(); i++) m[nums[i]] = i; for (int i = ; i < nums.size(); i++) {
if (m.count(target - nums[i]) && m[target - nums[i]] != i) {
res.push_back(i);
res.push_back(m[target - nums[i]]);
return res;
}
} return res;
}
};- 结果
aaarticlea/png;base64,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" alt="" width="680" height="331" />
- 快排-二分查找
- 实现
class Solution {
public:
vector<int> twoSum(vector<int>& B, int target) {
vector<int> res;
vector<pair<int, int>> A; for (int i = ; i < B.size(); i++) {
A.push_back(make_pair(B[i], i));
} my_qsort(A, , A.size() - ); for (int i = ; i <= A.size(); i++) {
int left = i + , right = A.size() - ;
while (left <= right) {
int mid = left + (right - left) / ;
if (A[mid].first == target - A[i].first) {
res.push_back(A[i].second);
res.push_back(A[mid].second);
return res;
}
if (A[mid].first < target - A[i].first) left = mid + ;
else right = mid - ;
}
} return res;
}
private:
void my_qsort(vector<pair<int, int>>& A, int l, int r) {
if (l > r) return; pair<int, int> key = A[l];
int nl= l, nr = r;
while (l < r) {
pair<int, int> tmp;
while (A[r].first >= key.first && l < r) r--;
while (A[l].first <= key.first && l < r) l++; tmp = A[l];
A[l] = A[r];
A[r] = tmp;
}
A[nl] = A[l];
A[l] = key; my_qsort(A, nl, l - );
my_qsort(A, l + , nr);
}
};
- 结果
aaarticlea/png;base64,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" alt="" width="664" height="331" />
- 快排-双指针
- 实现
class Solution {
public:
vector<int> twoSum(vector<int>& B, int target) {
vector<int> res;
vector<pair<int, int>> A; for (int i = ; i < B.size(); i++) {
A.push_back(make_pair(B[i], i));
} int left = , right = A.size() - ;
my_qsort(A, , A.size() - ); while (left < right) {
if (A[left].first + A[right].first < target) left++;
else if (A[left].first + A[right].first > target) right--;
else {res.push_back(A[left].second), res.push_back(A[right].second); return res;};
} return res;
}
private:
void my_qsort(vector<pair<int, int>>& A, int l, int r) {
if (l > r) return; pair<int, int> key = A[l];
int nl= l, nr = r;
while (l < r) {
pair<int, int> tmp;
while (A[r].first >= key.first && l < r) r--;
while (A[l].first <= key.first && l < r) l++; tmp = A[l];
A[l] = A[r];
A[r] = tmp;
}
A[nl] = A[l];
A[l] = key; my_qsort(A, nl, l - );
my_qsort(A, l + , nr);
}
};
- 结果
aaarticlea/png;base64,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" alt="" width="667" height="331" />
五. 相似题
[LeetCode] #1# Two Sum : 数组/哈希表/二分查找/双指针的更多相关文章
- [LeetCode] #167# Two Sum II : 数组/二分查找/双指针
一. 题目 1. Two Sum II Given an array of integers that is already sorted in ascending order, find two n ...
- perl5 第九章 关联数组/哈希表
第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制二.定义三.访问关联数组的元素四.增加元素五.创建关联数组六.从数组变量复制到关联数组七.元素的增删八.列出数组的索引和值九 ...
- 【ZZ】详解哈希表的查找
详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...
- Leetcode No.1 Two Sum(c++哈希表实现)
1. 题目 1.1 英文题目 Given an array of integers nums and an integer target, return indices of the two numb ...
- 167. 两数之和 II - 输入有序数组 + 哈希表 + 双指针
167. 两数之和 II - 输入有序数组 LeetCode_167 题目描述 方法一:暴力法(使用哈希表) class Solution { public int[] twoSum(int[] nu ...
- FZU-1881-Problem 1881 三角形问题,打表二分查找~~
B - 三角形问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
- HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛
题目链接 题意:给定一个数n,求大于n的第一个只包含2357四个因子的数(但是不能不包含其中任意一种),求这个数. 题解:打表+二分即可. #include <iostream> #inc ...
- leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独
leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...
- [LeetCode] 39. Combination Sum ☆☆☆(数组相加等于指定的数)
https://leetcode.wang/leetCode-39-Combination-Sum.html 描述 Given a set of candidate numbers (candidat ...
随机推荐
- Linux之vi/vim命令
vi命令是linux中必不可少的一个编辑器工具.那么vi与vim又有什么区别呢,可以简单理解为vim是vi的升级版.在编辑一个文本时,vi不会显示颜色,而vim会显示颜色.显示颜色更易于用户进行编辑, ...
- Android yyyymmdd转成yyyy-MM-dd格式
//把yyyymmdd转成yyyy-MM-dd格式 public static String formatDate(String str){ SimpleDateFormat sf1 = new Si ...
- SQL效率问题
关于in和or的效率对比:http://blog.chinaunix.net/uid-20639775-id-3416737.html 在没有索引的情况下,in的效率高 SQL语句效率:http:// ...
- netty websocket协议开发
websocket的好处我们就不用多说了,就是用于解决长连接.服务推送等需要的一种技术. 以下我们来看一个例子: package com.ming.netty.http.websocket; impo ...
- Ubuntu链接ubuntu服务器
以前在windows下用ssh工具putty连接 linux服务器, 很简单,在linux下要连接linux的服务器, 找了下,果然putty在linux中也行1,sudo apt-get insta ...
- jquery学习以及下载链接
jquery学习链接 http://www.w3school.com.cn/jquery/jquery_intro.asp jquery 脚本库下载链接 http://jquery.com/downl ...
- 面试题_89_to_92_单元测试 JUnit 面试题
89)如何测试静态方法?(答案)可以使用 PowerMock 库来测试静态方法. 90)怎么利用 JUnit 来测试一个方法的异常?(答案) 91)你使用过哪个单元测试库来测试你的 Java 程序?( ...
- 函数os_file_pread
/*******************************************************************//** Does a synchronous read ope ...
- Spring MVC定义拦截器
拦截器: package sy.Interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http ...
- bzoj3555: [Ctsc2014]企鹅QQ
将字符串hash.不难写.然而1.注意用longlong2.数组大小注意...3.似乎别人都用的unsigned long long ?. #include<cstdio> #includ ...