219. 存在重複元素II
阿新 • • 發佈:2021-11-29
滑動視窗
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { /** * 滑動視窗 * i為左指標,right為右指標,當區間長度小於k時且不滿足條件,right右移 * 當長度為k還不滿足條件,i右移,同時right從i + 1開始 */ for (int i = 0; i < nums.length; i++) { int right = i + 1; while (right - i <= k && right < nums.length){ if (nums[i] == nums[right]){ return true; } else { right++; } } } return false; } } /** * 時間複雜度 O(n) * 空間複雜度 O(1) */
優化1——使用集合儲存元素,避免重複判斷
import java.util.HashSet; class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { /** * 滑動視窗 * i為左指標,right為右指標,當區間長度小於k時且不滿足條件,right右移 * 當長度為k還不滿足條件,i右移,同時right從i + 1開始 * 用set儲存元素,當在k的範圍內出現重複元素時返回true,否則刪除儲存的第一個元素 */ HashSet<Object> set = new HashSet<>(); for (int i = 0; i < nums.length; i++) { if (set.contains(nums[i])){ return true; } set.add(nums[i]); if (set.size() > k){ set.remove(nums[i - k]); } } return false; } } /** * 時間複雜度 O(n) * 空間複雜度 O(1) */