Middle-题目122:220. Contains Duplicate III

本文介绍了一种使用TreeSet解决寻找接近重复项问题的方法。通过维护一个长度为k的TreeSet,利用其有序特性来判断是否存在两个数值之间的差值不超过t且下标差不超过k的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目原文:
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.
题目大意:
给出一个数组nums,判断是否存在这样两个下标i和j使得|nums[i]-nums[j]≤t,且|j-i|≤k.
题目分析:
巧用TreeSet这个类,它是一个集合,元素不可重复,不可维护加入集合的顺序,但集合是有序的,有floor(n)和ceiling(n)两个方法取得元素n相邻的两个元素。
那么构造一个TreeSet,并维持TreeSet的长度为K(如果i超过k就把nums[i-k]弹出去)。然后设n=nums[i].每次判断n-floor(n)是否≤t或者ceiling(n)是否≤t(因为TreeSet的长度不超过k,所以如果存在floor(n)或者ceiling(n),其在数组的下标与n的差值必然不超过k),若存在则找到解,返回true,若不存在则加入n,弹出nums[i-k],总的时间复杂度是O(nlogk) (因为TreeSet的add和remove都是logk复杂度的)
源码:(language:java)

public class Solution {
  public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
    if(k < 1 || t < 0)
      return false;
    TreeSet<Integer> set = new TreeSet<>();
    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;
  }
}

成绩:
68ms,beats 10.72%,众数23ms,5.88%
Cmershen的碎碎念:
本题类似于滑动窗口,是第一道需要用到TreeSet的题,但是效率不高,可能有O(n)的线性算法。TreeSet基于红黑树实现,它遗失插入顺序但保证集合内有序,而红黑树是一种应用广泛的用于查找的二叉树,关于红黑树的详细了解可自行百度。类似的数据结构还有TreeMap(保证key有序)。

时间限制:1000ms 内存限制:512MB 输入文件名:s.in 输出文件名:s.out 题目描述: 给定一个长度为 N 的只含小写字母的字符串 S,每次操作可以选择一个位置 1 ≤ x ≤ N 和一个小写字母 c,接着把 Sₓ 改为 c。 你需要操作若干次,使得操作结束后,每相邻 K 个字符都不同,求最少的操作次数。保证 1 ≤ K ≤ 13。 输入格式: 第一行一个整数 T,表示测试数据组数。 接下来 T 组测试数据,对于每组测试数据: 第一行两个整数 N, K,分别表示字符串长度和子串的长度。 第二行一个长度为 N 的字符串 S。 输出格式: 对于每组测试数据,输出一行一个整数表示最少的操作次数。 样例输入 1(input1): 5 6 3 abaaba 5 2 hooch 8 3 cherykid 9 3 abbabbaba 9 3 aabbaabba 样例输出 1(output1): 2 1 0 3 4 样例 #1 解释: 对于第一组数据,可以用 2 次操作把 S 改为 abcabc,每相邻三个字符组成的字符串分别是 abc、bca、cab、abc,都满足包含的字符互不相同。 对于第三组数据,请注意可以不进行操作。 数据范围: 对于所有数据,保证 1 ≤ T ≤ 10⁵,1 ≤ ∑N ≤ 10⁶,1 ≤ K ≤ 13,S 中只含有小写字符。 子任务说明: 子任务 1:∑N ≤ 10,K ≤ 10,分值 10 子任务 2:∑N ≤ 100,K ≤ 10,分值 10 子任务 3:∑N ≤ 10³,K ≤ 13,分值 10 子任务 4:∑N ≤ 10⁵,K ≤ 3,分值 20 子任务 5:∑N ≤ 10⁵,K ≤ 13,分值 20 子任务 6:∑N ≤ 10⁶,K ≤ 13,分值 30 用C++ 14 With O2的语言写一段代码,不要超时,不要注释,用万能头,变量名用一个字母表示,最终代码写好后随便写5组边缘样例测试一下刚刚写的代码(把代码放进编译器输出检查),然后根据刚刚的代码测试修改代码,将这两段代码里的变量名用一个字母替代。代码加上空格,使代码有可读性(实在拿不到全分,也可以拿部分分,尽量多拿!)注意加上文件读写!!!!!!!!!!
07-12
Duplicate class org.MediaPlayer.PlayM4.Player$MPSystemTime found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$MPVR_DISPLAY_EFFECT found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$MPVR_FISH_PARAM found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$MPVR_FISH_PTZ found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$MP_DECODE_TYPE found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$PRIVATE_RENDER found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$PTZ_PARAM found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$SESSION_INFO found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$SRTRANS_ELEMENT found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$SRTRANS_PARAM found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.Player$TEM_FLAG found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerAdditionalCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerAudioDataCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerDecodeCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerDecodeCBEx found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerDisplayCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerDisplayCBEx found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerEncTypeChgCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerEncryptTypeCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerFECDisplayCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerFileRefCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerHSDetectCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerIVSDrawFunCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerPlayEndCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerPreRecordCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerPreRecordCBEx found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.PlayerCallBack$PlayerRunTimeInfoCB found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.SurfaceCallBack found in modules jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Duplicate class org.MediaPlayer.PlayM4.TimeStruct found in the following modules: jetified-PlayerSDK_hcnetsdk (PlayerSDK_hcnetsdk.jar), jetified-ezviz-sdk-4.9.1.1-runtime (com.ezviz.sdk:ezviz-sdk:4.9.1.1) and jetified-ezviz-sdk-5.20-runtime (io.github.ezviz-open:ezviz-sdk:5.20) Go to the documentation to learn how to Fix dependency resolution errors. 解决rebuild project后的报错
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值