leetcode 220. Contains Duplicate III TreeSet和SortedSet的应用
来源:互联网 发布:手机淘宝买彩票 编辑:程序博客网 时间:2024/06/09 19:43
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i] and nums[j] is at most t and the absolute difference between i and j is at most k.
这道题题意很简单明了,但是我暂时想不清楚怎么做,我在网上看到有人使用SortSet和TreeSet,真的很棒,但是之前没用过,所以还待学习。
建议和这一道题leetcode 217. Contains Duplicate 遍历 + HashSet 和 这一道题leetcode 219. Contains Duplicate II 学习HashMap 一起学习。
代码如下:
import java.util.SortedSet;import java.util.TreeSet;public class Solution { /* * http://blog.csdn.net/xudli/article/details/46323247 * * 这个方法是使用Java中的Sortset结构,set保存的始终是jindex在k之内,值相差在t之内的元素, * 一旦不为空就表示存在元素 * index只差不超过k,值不超过t * */ public boolean containsNearbyAlmostDuplicate1(int[] nums, int k, int t) { //input check if(k<1 || t<0 || nums==null || nums.length<2) return false; SortedSet<Long> set = new TreeSet<Long>(); for(int j=0; j<nums.length; j++) { SortedSet<Long> subSet = set.subSet((long)nums[j]-t, (long)nums[j]+t+1); if(!subSet.isEmpty()) return true; //滑动窗口 if(j>=k) set.remove((long)nums[j-k]); set.add((long)nums[j]); } return false; } /* * TreeSet数据结构(Java)使用红黑树实现,是平衡二叉树的一种。 * 该数据结构支持如下操作: * 1. floor()方法返set中≤给定元素的最大元素;如果不存在这样的元素,则返回 null。 * 2. ceiling()方法返回set中≥给定元素的最小元素;如果不存在这样的元素,则返回 null。 * * index只差不超过k,值不超过t * * */ public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if(k<1||t<0) return false; TreeSet<Integer> set = new TreeSet<Integer>(); for(int i=0;i<nums.length;i++) { int n = nums[i]; if((set.floor(n)!=null&& n<=t+set.floor(n)) ||(set.ceiling(n)!=null && set.ceiling(n)<=t+n)) return true; set.add(n); //滑动窗口 if(i>=k) set.remove(nums[i-k]); } return false; }}
下面是C++的做法,就是使用一个下届函数来做判定
需要注意的是:这里可能出现int越界的现象,所以注意使用long等等数据结构
代码如下:
#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>using namespace std;class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { if (k < 1 || t < 0 || nums.size() <= 0) return false; set<long> s; for (int i = 0; i < nums.size(); i++) { auto pos = s.lower_bound(((long)nums[i] - t)); if (pos != s.end() && *pos <= (long)nums[i] + t) return true; if (i >= k) s.erase(s.find(nums[i-k])); s.insert(nums[i]); } return false; }};
阅读全文
0 0
- leetcode 220. Contains Duplicate III TreeSet和SortedSet的应用
- Java TreeSet的使用 (LeetCode Contains Duplicate III )
- 220. Contains Duplicate III set的应用
- [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
- 使用ijkplayer 查看大华固定ip摄像头
- svn报错can only be performed on a version resource [at this time].
- python2的print和python3的print()
- data.jpa.repository 数据库查询
- java之配置文件加载
- leetcode 220. Contains Duplicate III TreeSet和SortedSet的应用
- 使用docker运行mysql实例
- 搜索引擎页面编写
- LinuxStudyNote(7)-Linux常用命令(2)-文件处理命令(2)-创建目录命令mkdir
- 第一篇博客
- python+字典的遍历与排序以及后续的学习记录
- 关于建站教程的FTP相关操作
- guava Optional api使用
- android.support.v7.app.AlertDialog显示异常