"Contains Duplicate II" and "Merge Sorted Array"

来源:互联网 发布:apache 可以运行php吗 编辑:程序博客网 时间:2024/05/17 03:40

Contains Duplicate II:

一开始想的还是线性查找(囧),试了下超时(时间复杂度O(N^2))。看到网上说用一个大小为K的框去依次check整个数列,还是超时(时间复杂度O(N))。最后还是得祭出map,还是O(logN)查的快(囧)。主要是学到了新的map写法,以前都是用insert之类的方法,原来还可以用近似数组的方法使用map啊。

class Solution {public:bool containsNearbyDuplicate(vector<int>& nums, int k) {map<int, int> m;for (int i = 0; i < nums.size(); ++i) {if (m.find(nums[i]) != m.end() && i - m[nums[i]] <= k) return true;else m[nums[i]] = i;}return false;}};

Merge Sorted Array:

这道题有个测试用例有些问题:[0],0,[1],1。这样的话第一个数组里明明是有元素的,但是给定的m==0,打破了我用一个额外的vector存储nums1和nums2连接起来的结果,然后对vector做快排的幻想,但是我还是写了一份这样的代码,通不过judge,权当练习快排了。

int partition(vector<int> & a, int p, int r){int x = a[r];int i = p - 1;for (int j = p; j <= r - 1; j++){if (a[j] < x){i++;swap(a[i], a[j]);}swap(a[i + 1], a[r]);}return i + 1;}void quick_sort(vector<int> & a, int p, int r){if (p < r){int q;q = partition(a, p, r);quick_sort(a, p, q - 1);quick_sort(a, q + 1, r);}}


0 0