标签:总结 set 下标 nums long 算法 整数 false
1.值和下标之差都在给定的范围内
给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。
如果存在则返回 true,不存在返回 false。

package com.chenghaixiang.jianzhi2.day19; import java.util.TreeSet; /** * @author 程海翔 * @school 石家庄铁道大学 */ public class Office057 { } //给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。 // //如果存在则返回 true,不存在返回 false。 class Solution01 { //滑动窗口,k即是窗口大小 //在每个元素x的前面最多k个元素中找,是否满足在[x-t],[x+t]区间中,(abs(nums[i] - nums[j]) <= t,等价于[x-t],[x+t],x是num[i],求num[j] public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { //有序集合,自动排序,查找遍历时间复杂度低 TreeSet<Long> set=new TreeSet<>(); //用Long是因为为防止整型 int 溢出 for (int i=0;i<nums.length;i++){ //ceiling(E e) 返回此集合中最小元素大于或等于给定元素,如果没有此元素,则返回 null 。 //celling>=nums[i]-t,即[x-t] Long celling=set.ceiling((long)nums[i]-(long)t); //celling<=((long)nums[i]+(long)t),即[x+t] if(celling!=null&&celling<=((long)nums[i]+(long)t)){ return true; } set.add((long)nums[i]); //超过窗口大小移除值 if (i >= k) { set.remove((long)nums[i-k]); } } return false; } }View Code
标签:总结,set,下标,nums,long,算法,整数,false 来源: https://www.cnblogs.com/chenghaixiang/p/16679026.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。