"Contains Duplicate II" and "Merge Sorted Array"

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);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值