leetcode--Contains Duplicate II
2016-12-14 16:44
239 查看
题目:Contains Duplicate II
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 j is
at most k.
题目分析:若数组中存在两个元素相等且index值的差小于等于k返回true,否则返回false。
One:运用HashMap的方法
Three:用HashSet的方法,及时保持HashSet的长度小于等于k
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 j is
at most k.
题目分析:若数组中存在两个元素相等且index值的差小于等于k返回true,否则返回false。
One:运用HashMap的方法
public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { if(nums==null||nums.length==0)return false; Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(int i = 0;i < nums.length;i++){ if(map.containsKey(nums[i])){ if(i-map.get(nums[i])<=k){ return true; }else{ map.remove(nums[i]); map.put(nums[i],i); } } map.put(nums[i],i); } return false; } }Two:了解了HashMap的put方法若键值已存在返回旧键值的value,不存在加入map,且返回null。进一步对代码进行优化如下:
public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(int i = 0;i < nums.length;i++){ Integer oldv = map.put(nums[i],i); if(oldv!=null&&i - oldv <= k){ return true; } } return false; } }
Three:用HashSet的方法,及时保持HashSet的长度小于等于k
public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Set<Integer> set = new HashSet<Integer>(); for(int i = 0;i < nums.length;i++){ if(i>k) set.remove(nums[i-k-1]); if(!set.add(nums[i])) return true; } return false; } }Four:对比两条语句放在前和后的区别
public boolean containsNearbyDuplicate(int[] nums, int k) { HashSet<Integer> hs=new HashSet<>(); for(int i=0;i<nums.length;i++) { if(hs.add(nums[i])==false) return true; if(hs.size()==k+1) hs.remove(nums[i-k]); } return false; }
相关文章推荐
- Leetcode_219 Contains Duplicate II
- leetcode之219. Contains Duplicate II(C++解法)
- [leetcode]Contains Duplicate II
- Leetcode36: Contains Duplicate II
- Leetcode 219. Contains Duplicate II
- LeetCode Contains Duplicate II (判断重复元素)
- leetcode_219题——Contains Duplicate II(哈希表)
- LeetCode :Contains Duplicate II
- LeetCode 219. Contains Duplicate II
- LeetCode Contains Duplicate II
- leetcode 219. Contains Duplicate II
- leetcode 219: Contains Duplicate II
- leetcode--Contains Duplicate II
- leetcode - Contains Duplicate II -- 重点
- LeetCode之Contains Duplicate II
- Contains Duplicate II -- leetcode
- LeetCode: Contains Duplicate II
- LeetCode 219 Contains Duplicate II
- 219. Contains Duplicate II LeetCode
- LeetCode[219] Contains Duplicate II