您的位置:首页 > 大数据 > 人工智能

"Contains Duplicate II" and "Merge Sorted Array"

2016-06-07 16:33 483 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: