"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啊。
Merge Sorted Array:
这道题有个测试用例有些问题:[0],0,[1],1。这样的话第一个数组里明明是有元素的,但是给定的m==0,打破了我用一个额外的vector存储nums1和nums2连接起来的结果,然后对vector做快排的幻想,但是我还是写了一份这样的代码,通不过judge,权当练习快排了。
一开始想的还是线性查找(囧),试了下超时(时间复杂度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); } }
相关文章推荐
- 理解和运用Rails Asset Pipeline
- svn: Commit failed: already exists
- HDU 1789 Doing Homework again(贪心)
- svn aborting commit remains in conflict
- 添加RAID驱动到INITRD.IMG
- Chains (链 )
- 如何将Windows AD的Default Domain Policy和Default Domain Controllers Policy恢复
- Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
- AIDL使用方法总结
- 将保护清理不良资产的银行家:Arun Jaitley在评审会议
- kafka消费者报错:Failed to add leader for partitions
- 从0开始学习blockchain
- (RHCA436)8 Constraint策略
- __main__.py 和 __init__.py
- aix内存管理实践
- [转] IAR contains unknow tools 解决方法
- Mybaits多数据源配置
- 一个非常好用的data pipeline管理工具 airflow
- 使用Airbnb的Airflow来管理数据工作流
- error: linker command failed with exit code 1 (us