interview_internal_reference
interview_internal_reference copied to clipboard
1.3.5 答案有误
原题目: 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度
分析:答案给的two pointers解法,但是前提是数组是有序的才行
修改建议: 把题目中数组改为从小到大排列的有序数组 或修改算法,先将数组排序,这样时间复杂度为O(nlogn)
楼上+1
无序还可以考虑用hashmap,空间换时间,平均时间复杂度O(n)
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> imap;
for (int i = 0; i < nums.size(); ++i) {
auto it = imap.find(target - nums[i]);
if (it != imap.end()) return vector<int> {imap[target - nums[i]], i};
imap[nums[i]] = i;
}
return vector<int> {};
}
};