`

Leetcode - Contains Duplicate II

 
阅读更多
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 difference between i and j is at most k.

[分析]
思路1:使用HashSet, HashSet中存最近访问的 k 个元素,从第 k + 1个元素开始遍历检查,若 HashSet中存在同当前访问元素相同的说明 k 邻域内存在重复元素,否则添加当前元素并删除与其下标距离 为 k 的元素。特别注意若先删除再添加需要特殊处理 k == 0的情况,不然遍历过程中HashSet只增不减。
思路2:使用HashMap,key是数组元素值,value是该元素最近被访问的下标。遇到相同元素check其与上一次位置的距离是否 <= k

public class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        if (nums == null || nums.length < 2)
            return false;
        HashSet<Integer> set = new HashSet<Integer>();
        int end = Math.min(k, nums.length);
        for (int i = 0; i < end; i++) {
            if (set.contains(nums[i]))
                return true;
            set.add(nums[i]);
        }
        for (int i = k; i < nums.length; i++) {
            if (set.contains(nums[i]))
                return true;
            set.add(nums[i]);
            set.remove(nums[i - k]);
        }
        return false;
    }
    public boolean containsNearbyDuplicate2(int[] nums, int k) {
        if (nums == null || nums.length < 2)
            return false;
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(nums[i])) {
                if (i - map.get(nums[i]) <= k)
                    return true;
            } 
            map.put(nums[i], i);
        }
        return false;
    }
}
分享到:
评论

相关推荐

    lrucacheleetcode-leetcode-in-go:leetcode-in-go

    contains-duplicate-0217 find-minimum-in-rotated-sorted-array-0153 数组的乘积-除了-self-0238 从排序数组中删除重复项-0026 搜索旋转排序数组-0033 两个整数之和-0371 二和-0001 回溯 组合-和-0039 组合总和-ii-...

    javalruleetcode-leetcode-java:力码笔记

    java lru leetcode leetcode-java leetcode刷题笔记 已做题目列表 1.Two Sum 3.Longest Substring Without Repeating Characters ...II ...II ...217.Contains Duplicate 263.Ugly Number 264.Ugly Number II

    Leetcode的ac是什么意思-LeetCodeInJava:leetcode-java

    Leetcode的ac是什么意思 LeetCodeInJava List #98 Validate Binary Search Tree #100 Same Tree #104 Maximum Depth of Binary Tree #122 Best Time to Buy and Sell Stock II #136 Single Number #150 Evaluate ...

    LeetCode最全代码

    137 | [Single Number II](https://leetcode.com/problems/single-number-ii/) | [C++](./C++/single-number-ii.cpp) [Python](./Python/single-number-ii.py) | _O(n)_ | _O(1)_ | Medium ||| 190 | [Reverse Bits]...

    判断链表是否为回文链表leetcode-Algos_Practice:来自Leetcode、HackerRank等网站的练习题

    “contains_duplicate.py” - 检查整数列表是否包含任何重复项的快速算法。 “contains_nearby_duplicate.py” - 检查整数列表是否包含距离 k 内的任何重复项的快速算法。 "coin_arrangement.py" - 给定 n,算法找到...

    leetcode浇花-LCSolutions:我的力扣解决方案

    leetcode 浇花力扣解决方案 简单的 #0001 - Two Sum #0007 - Reverse Integer #0009 - Palindrome Number #0035 - Search Insert Position #0058 - Length of Last Word #0066 - Plus One #0083 - Remove Duplicates...

    leetcode1004-leetcode:leetcode

    Contains Duplicate (E) 48. Rotate Image (M) -&gt; 2 73. Set Matrix Zeroes (M) 1. Two Sum (E) 167. Two Sum II - Input array is sorted (E) 653. Two Sum IV - Input is a BST (E) -&gt; 2 26. Remove Duplicates ...

    leetcode下载-algorithm_practise:算法实践

    leetcode下载 algorithm_reearch algorithm_reearch 链表 leetcode: 146 有无环 双向链表,删除 写大于读的情形 LinkedHashMap与 LRU算法 基于访问时间的链表 或者 基于插入时间的链表 哈希表: leetcode: 1. two sum...

    gasstationleetcode-leetcode_java:为求职做准备。Leetcode的java版本

    leetcode leetcode_java prepare for jobhunting. java version of Leetcode. easy 55 about takes 5 days medium 112 about takes 20 days hard 48 about take 10 days Summarize and implement all sort ...

    leetcode答案-code_challenges:代码挑战

    leetcode 答案Leet Code 挑战 这是我提交给 Lambda School CS Unit 2 构建周的已接受 ...Duplicates](https://leetcode.com/problems/contains-duplicate/) [x] [Linked List Cycle II](https://leetcode.co

    cpp-算法精粹

    Contains Duplicate II Contains Duplicate III Product of Array Except Self Game of Life Increasing Triplet Subsequence 单链表 Reverse Linked List Odd Even Linked List Add Two Numbers Reverse Linked ...

Global site tag (gtag.js) - Google Analytics