ContainsDuplicateIIOPT [source code]


public class ContainsDuplicateIIOPT {
static
/******************************************************************************/
public class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        if (k == 35000) return false;
        int size = nums.length;
        if (k >= size) {
            return containsNearbyDuplicate(nums);
        }
        if (k > 0 && size > 1) {
            int i = 0;
            while (i < size - k) {
                if (containsNearbyDuplicate(Arrays.copyOfRange(nums, i, i + k + 1)))
                    return true;
                i++;
            }
        }
        return false;
    }

    public boolean containsNearbyDuplicate(int[] nums) {
        int size = nums.length;
        Arrays.sort(nums);
        for (int i = 1; i < size; i++) {
            if (nums[i - 1] == nums[i]) {
                return true;
            }
        }
        return false;
    }
}
/******************************************************************************/

    public static void main(String[] args) {
        ContainsDuplicateIIOPT.Solution tester = new ContainsDuplicateIIOPT.Solution();
    }
}

这个是 submission 最优解, 让人难以置信的0(99);

我操这个果然还真的是sliding window来做的. 我当时几乎都想写一个这样的代码了, 不过后来想想 duplicate 实际上也不好处理;
他这个其实worst case 的速度并不好, 因为他是用了排序的. 总的来说这个解还是利用了一个HashMap 的 overhead 问题的意思吧.

另外严格来说这个算法都不算是sliding window, 这个就跟最普通的substring search一样, 最基本的slide, 没有什么特别的技术含量的;


Problem Description

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.

Difficulty:Easy
Total Accepted:112.2K
Total Submissions:348.4K
Contributor: LeetCode
Companies
palantir airbnb
Related Topics
array hash table
Similar Questions
Contains Duplicate Contains Duplicate III

results matching ""

    No results matching ""