1. 程式人生 > 其它 >219. 存在重複元素II

219. 存在重複元素II

滑動視窗

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)
 */

https://leetcode-cn.com/problems/contains-duplicate-ii/