leetcode之求数组中俩个值和等于给定值用unordered_map降低时间复杂度
2016-09-12 14:38
344 查看
这题直接撸了一发O(n^2)时间复杂度,后来想一想,多有不妥,遂看讨论,可以用STL,改成O(n)时间复杂度,
O(n^2)很简单,不贴了,
贴个O(n)的:
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
unordered_map<int,int> map;
vector<int> result(2);
for(int i=0;i<numbers.size();i++){
int value=target-numbers[i];
if(map.find(value)!=map.end()){
result[0]=map[value];
result[1]=i+1;
break;
}
map[numbers[i]]=i+1;
}
return result;
}
};
O(n^2)很简单,不贴了,
贴个O(n)的:
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
unordered_map<int,int> map;
vector<int> result(2);
for(int i=0;i<numbers.size();i++){
int value=target-numbers[i];
if(map.find(value)!=map.end()){
result[0]=map[value];
result[1]=i+1;
break;
}
map[numbers[i]]=i+1;
}
return result;
}
};
相关文章推荐
- 题目四:给定一个数组,值可以为正、负和0,请返回累加和小于等于k的最长子数组长度。 时间复杂度:O(n)
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 在已排序的数组中寻找和是给定值的两项,要求时间复杂度为O(n)
- [转]PHP 中巧用数组降低程序的时间复杂度
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 给定整型数组,其中每个元素表示木板的高度,木板的宽度都相同,求这些木板拼出的最大矩形的面积。并分析时间复杂度。
- 给定无序自然数数组,求最大连续自然数个数,时间复杂度为O(n)
- 从俩个有序数组中找出第K小的数。要求时间复杂度O(logmin(m,n))
- leetcode_414. Third Maximum Number 返回数组中第三大的数,要求用O(n)的时间复杂度
- bit-map牛刀小试:数组test[X]的值所有在区间[1, 8000]中, 现要输出test中反复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB
- 找出和值等于指定值的元素,如有序数组{1,2,6,23,43,64},求和等于25的两个和数则将是元素2和23,时间复杂度是0(n)。
- PHP 巧用数组降低程序的时间复杂度
- bit-map牛刀小试:数组test[X]的值全部在区间[1, 8000]中, 现要输出test中重复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB
- 给定整型数组,其中每个元素表示木板的高度,木板的宽度都相同,求这些木板拼出的最大矩形的面积。并分析时间复杂度。
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)。
- 给定一个乱序数组,找到其中第K大的值,要求时间复杂度最低
- PHP 中巧用数组降低程序的时间复杂度
- PHP 中巧用数组降低程序的时间复杂度
- LeetCode Median of Two Sorted Arrays 在两个已排列的数组中找出中位数。时间复杂度为O(log(min(N,M))