interview_internal_reference icon indicating copy to clipboard operation
interview_internal_reference copied to clipboard

1.3.5 答案有误

Open AOQNRMGYXLMV opened this issue 5 years ago • 1 comments

原题目: 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度

分析:答案给的two pointers解法,但是前提是数组是有序的才行

修改建议: 把题目中数组改为从小到大排列的有序数组 或修改算法,先将数组排序,这样时间复杂度为O(nlogn)

AOQNRMGYXLMV avatar Jul 20 '19 15:07 AOQNRMGYXLMV

楼上+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> {};
    }
};

Nuullll avatar Jul 22 '19 13:07 Nuullll