219. Contains Duplicate II
2016-05-05 15:20
375 查看
题目:
Given an array of integers and an integer k,
find out whether there are two distinct indices i and j in
the array such that nums[i] = nums[j] and
the difference between i and jis
at most k.
题意:给定一个整数数组nums与一个整数k,当且仅当存在两个不同的下标i和j满足nums[i]
= nums[j]并且| i - j | <= k时返回true,否则返回false。
解题思路:定义一个set(set中不存在重复元素),将下标小于k的加入到set集合中,当下标超过k时,移除最开始的元素。当set中的元素个数小于等于k个且插入新元素返回false时,返回true,否则false;
代码:
C++版:
public class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
//0842
Set<Integer> appearedNum = new HashSet<Integer>();
int start = 0, end = 0;
for(int i = 0; i < nums.length; i++){
if(!appearedNum.contains(nums[i])){
appearedNum.add(nums[i]);
end++;
} else return true;
if(end - start > k) {
appearedNum.remove(nums[start]);
start++;
}
}
return false;
//0848
}
}
Given an array of integers and an integer k,
find out whether there are two distinct indices i and j in
the array such that nums[i] = nums[j] and
the difference between i and jis
at most k.
题意:给定一个整数数组nums与一个整数k,当且仅当存在两个不同的下标i和j满足nums[i]
= nums[j]并且| i - j | <= k时返回true,否则返回false。
解题思路:定义一个set(set中不存在重复元素),将下标小于k的加入到set集合中,当下标超过k时,移除最开始的元素。当set中的元素个数小于等于k个且插入新元素返回false时,返回true,否则false;
代码:
C++版:
class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { set<int> result; for (int i = 0; i < nums.size(); i++) { if (i > k) result.erase(nums[i-k-1]); if (!result.insert(nums[i]).second) return true; } return false; } };
class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_map<int, int> mapping; for(int i=0; i<nums.size(); i++){ if(mapping.find(nums[i])!=mapping.end() && i-mapping[nums[i]]<=k) return true; mapping[nums[i]] = i; } return false; } };java版:
public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Set<Integer> result = new HashSet<Integer>(); for(int i = 0; i < nums.length; i++){ if(i > k) result.remove(nums[i-k-1]); if(!result.add(nums[i])) return true; } return false; } }
public class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
//0842
Set<Integer> appearedNum = new HashSet<Integer>();
int start = 0, end = 0;
for(int i = 0; i < nums.length; i++){
if(!appearedNum.contains(nums[i])){
appearedNum.add(nums[i]);
end++;
} else return true;
if(end - start > k) {
appearedNum.remove(nums[start]);
start++;
}
}
return false;
//0848
}
}
相关文章推荐
- readwrite,readonly,assign,retain,copy,nonatomic 属性的作用
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- rails笔记
- 虚拟机不能启动,E_FAIL(0x80004005) 及其处理
- Rails Cookies与Session操作汇总
- OpenCV 之 HaarTraining 算法剖析
- LeetCode 256. Paint House
- 217. Contains Duplicate
- LeetCode 217: Contains Duplicate
- opencv源码解读——haartraining
- LeetCode 219: Contains Duplicate II
- KairosDB 监控系统介绍
- 美国白宫将探讨人工智能 概念股分析
- odoo开发domain的使用
- I/O wait高高等待
- SwingUtilities中invokeLater,invokeAndWait的作用和区别
- 人工智能幸顿(Hinton)学派
- RailsでActiveRecord/Arelを使って複雑なSELECT文を実行する方法
- 谈应用环境下的TIME_WAIT和CLOSE_WAIT[转]
- IBM ESB 消息流发送邮件