From cce43d9cd6d2ea0271799a8782892415e000f99c Mon Sep 17 00:00:00 2001 From: "huangge1199@hotmail.com" Date: Sat, 17 Apr 2021 17:54:32 +0800 Subject: [PATCH] =?UTF-8?q?220:=E5=AD=98=E5=9C=A8=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=85=83=E7=B4=A0=20III?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editor/cn/ContainsDuplicateIii.java | 71 +++++++++++++++++++ .../editor/cn/ContainsDuplicateIii.md | 35 +++++++++ 2 files changed, 106 insertions(+) create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.java create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.md diff --git a/LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.java b/LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.java new file mode 100644 index 0000000..4e8a25f --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.java @@ -0,0 +1,71 @@ +//给你一个整数数组 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 +// +// Related Topics 排序 Ordered Map +// 👍 391 👎 0 + +package leetcode.editor.cn; + +import java.util.*; + +//220:存在重复元素 III +public class ContainsDuplicateIii { + public static void main(String[] args) { + //测试代码 + Solution solution = new ContainsDuplicateIii().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { + int n = nums.length; + TreeSet 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; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.md b/LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.md new file mode 100644 index 0000000..d5209ed --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/ContainsDuplicateIii.md @@ -0,0 +1,35 @@ +

给你一个整数数组 nums 和两个整数 kt 。请你判断是否存在 两个不同下标 ij,使得 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
+ +

 

+ +

提示:

+ + +
Related Topics
  • 排序
  • Ordered Map
  • \n
  • 👍 391
  • 👎 0
  • \ No newline at end of file