[leetcode] Contains Duplicate II
2015-06-23 13:12
441 查看
Contains Duplicate II
Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.Have you met this question in a real interview?
方法一:
分析:可以直接定义一个长度最大为k的滑动窗口,用一个set维护窗口内的数字判断是否出现重复,使用两个指针start和end标记滑动窗口的两端,初始都是0,然后end不断进行扩展,扫描元素判断是否出现重复元素,直到发现end-start>k, 就开始移动start,并且在set中移除对应的元素。如果以为扫描到数组末尾还没有发现重复元素,那就可以返回false。时间复杂度和空间复杂度都是 O(N)。
class Solution { public: bool containsNearbyDuplicate(vector<int> &nums, int k) { set<int> S; int start = 0, end = 0; for(int i=0; i<nums.size(); i++) { if(S.find(nums[i]) != S.end()) return true; else { S.insert(nums[i]); end++; } if(end-start > k) { S.erase(nums[start]); start++; } } return false; } };
方法二:
使用map记录出现过的nums[i],并记录对应的位置i,当出现冲突时,比较两者位置关系,如果小于等于k,则返回true,否则记录新位置;如果没有冲突,则说明不含有重复元素。
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; } };
相关文章推荐
- Advanced.Aircraft.Analysis.v2.5.1.53 1CD(飞机设计性能分析软体)
- rails 中 preload、includes、Eager load、Joins 的区别
- Filter和FilterChain具体的使用说明
- Contains Duplicate
- 利用list的Contains判断是否包含
- [leetcode] Contains Duplicate
- ArcEngine9.3报错Create output feature class failed
- Sakai Project(1)--源码部署安装
- leetcode:Container With Most Water 6行AC
- Factorial Trailing Zeroes
- Rails Minitest style 指南
- leetcode | Climbing Stairs
- uva live 4394 String painter 间隔dp
- Campaignify 众筹集资 WordPress主题
- ApiDemo/FragmentRetainInstance 解析
- 使用UltraISO制作U盘启动盘
- 阅读:AirBag Boosting Smartphone Resistance to Malware Infection
- Failure [INSTALL_FAILED_OLDER_SDK]
- 属性readwrite,readonly,assign,retain,copy,nonatomic
- POJ 1575 && HDU 1039 Easier Done Than Said?(水~)