一、題目大意
給你一個整數陣列 nums 和兩個整數 k 和 t ,請你判斷是否存在 兩個不同下標 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同時又滿足 abs(i - j) <= k ,
如果存在則回傳 true,不存在回傳 false,
示例 1:
輸入:nums = [1,2,3,1], k = 3, t = 0
輸出:true
示例 2:
輸入:nums = [1,0,1,1], k = 1, t = 2
輸出:true
示例 3:
輸入:nums = [1,5,9,1,5,9], k = 2, t = 3
輸出:false
提示:
-
0 <= nums.length <= 2 * 104
-
-231 <= nums[i] <= 231 - 1
-
0 <= k <= 104
-
0 <= t <= 231 - 1
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/contains-duplicate-iii
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
二、解題思路
這道題關注與不同值之間的關系,有兩個限制條件,兩個數字的坐標差不能大于k,值差不能大于t,還是用map結構來記錄值和下標的映射,這里定義兩上變數i和j,開始都指向0,然后i開始向右遍歷陣列,如果i和j之差大于k,且map中有nums[j],則洗掉并j+1,這樣保證了map中所有的數的下標之差都不大于k,然后我們檢查如果有值差小于等于則回傳true,遍歷最后回傳false,
三、解題方法
3.1 Java實作
public class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
int n = nums.length;
TreeSet<Long> set = new TreeSet<>();
for (int i = 0; i < n; i++) {
Long ceiling = set.ceiling((long) nums[i] - (long) t);
if (ceiling != null && ceiling <= (long) nums[i] + (long)t) {
return true;
}
set.add((long) nums[i]);
if (i >= k) {
set.remove((long) nums[i - k]);
}
}
return false;
}
}
四、總結小記
- 2022/10/13 老板是公司的支柱,公司的支柱是全身心投入到公司的人
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/514184.html
標籤:其他
上一篇:假設檢驗
