LeetCode 220. Contains Duplicate III(检查重复)
来源:互联网 发布:装修 知乎 编辑:程序博客网 时间:2024/06/05 08:03
原题网址:https://leetcode.com/problems/contains-duplicate-iii/
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is at most k.
方法一:使用有序集合。
public class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if (nums == null || nums.length <= 1 || k <= 0 || t < 0) return false; if (t < 0) t = -t; TreeSet<Long> ts = new TreeSet<>(); for(int i=0; i<nums.length; i++) { if (i>k) ts.remove((long)nums[i-k-1]); if (!ts.subSet((long)nums[i]-t, true, (long)nums[i]+t, true).isEmpty()) return true; ts.add((long)nums[i]); } return false; }}
方法二:使用桶。
public class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if (nums == null || nums.length <= 1 || k < 1 || t < 0) return false; long min = nums[0]; for(int num: nums) min = Math.min(min, num); Map<Long, Long> buckets = new HashMap<>(); for(int i=0; i<nums.length; i++) { if (i>k) { long key = (nums[i-k-1]-min)/((long)t+1); buckets.remove(key); } long key = (nums[i]-min)/((long)t+1); if (buckets.containsKey(key)) return true; Long small = buckets.get(key-1); if (small != null && nums[i]-small<=t) return true; Long great = buckets.get(key+1); if (great != null && great-nums[i]<=t) return true; buckets.put(key, (long)nums[i]); } return false; }}心得:凡是涉及到间隔、距离的,都有可能应用桶排序。而且桶排序不一定用数组!
0 0
- LeetCode 220. Contains Duplicate III(检查重复)
- LeetCode 217. Contains Duplicate(检查重复)
- [leetcode ]220.Contains Duplicate III
- LeetCode 220. Contains Duplicate III
- Leetcode-220. Contains Duplicate III
- [LeetCode]220. Contains Duplicate III
- leetcode.220. Contains Duplicate III
- LeetCode 220. Contains Duplicate III
- leetcode 220. Contains Duplicate III
- 【LeetCode】220. Contains Duplicate III
- LeetCode 220. Contains Duplicate III
- Leetcode 220. Contains Duplicate III
- leetcode 220. Contains Duplicate III
- [leetcode]220. Contains Duplicate III
- #leetcode#220. Contains Duplicate III
- [leetcode]220. Contains Duplicate III
- leetcode 220. Contains Duplicate III
- 220. Contains Duplicate III [leetcode]
- SICP ex 1-27
- plsql查询数据显示为乱码解决方法
- PHP自学no00006数据类型字符串型之转义符
- 69道Spring面试题和答案
- Nodejs(七)
- LeetCode 220. Contains Duplicate III(检查重复)
- 69道Spring面试题和答案
- 1012. The Best Rank (25)
- LeetCode 99. Recover Binary Search Tree
- PAT
- Object 监视器方法分解成截然不同的对象, 以便通过将这些对象与任意Lock 实现组合使用,为每个对象提供多个等待 set
- aggregate对有相同元素的列进行共同的变化
- hdu-2089 不要62[数位dp]
- Linux学习之vim编辑器