1. 程式人生 > >LeetCode 219. 存在重複元素 II Contain Duplicate II

LeetCode 219. 存在重複元素 II Contain Duplicate II

4-7 查詢表和滑動視窗 Contain Duplicate II

題目: LeetCode 219. 存在重複元素 II

給定一個整數陣列和一個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的絕對值最大為 k。

示例 1:

輸入: nums = [1,2,3,1], k = 3 輸出: true 示例 2:

輸入: nums = [1,0,1,1], k = 1 輸出: true 示例 3:

輸入: nums = [1,2,3,1,2,3], k = 2 輸出: false

import java.util.HashSet;
// 219. Contains Duplicate II // https://leetcode.com/problems/contains-duplicate-ii/description/ // 時間複雜度: O(n) // 空間複雜度: O(k) public class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { if(nums == null || nums.length <= 1) return false; if(k <= 0
) return false; HashSet<Integer> record = new HashSet<Integer>(); for(int i = 0 ; i < nums.length; i ++){ if(record.contains(nums[i])) return true; record.add(nums[i]); if(record.size() == k + 1) record.
remove(nums[i-k]); } return false; } private static void printBool(boolean b){ System.out.println(b ? "True" : "False"); } public static void main(String[] args) { int[] nums = {1, 2, 1}; int k = 1; printBool((new Solution()).containsNearbyDuplicate(nums, k)); } }