zoukankan      html  css  js  c++  java
  • 【LeetCode】219. 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 jis at most k.

    提示:

    此题考察的是对Hash Table的应用。这里给出两种方法,第一种基于unordered_map(HashMap),第二种基于unordered_set(HashSet)。

    代码:

    unordered_map:

    class Solution {
    public:
        bool containsNearbyDuplicate(vector<int>& nums, int k) {
            unordered_map<int, int> unmap;
            for (int i = 0; i < nums.size(); ++i) {
                if (unmap.find(nums[i]) == unmap.end()) {
                    unmap[nums[i]] = i;
                } else {
                    int dis = i - unmap[nums[i]];
                    if (dis <= k) return true;
                    unmap[nums[i]] = i;
                }
            }
            return false;
        }
    };

    核心思想就是将数作为键,将数的位置作为值。若遇到相同的数,比较位置差异。

    下面是基于unordered_set的方法:

    class Solution {
    public:
        bool containsNearbyDuplicate(vector<int>& nums, int k) {
            unordered_set<int> us;
            for (int i = 0; i < nums.size(); i++) {
                if (i > k) us.erase(nums[i-k-1]);
                if (!us.insert(nums[i]).second) return true;
            }
            return false;
        }
    };

    相当于是维护一个大小为k+1的划窗,如果超出了划窗的大小就剔除划窗中的第一个数字。如果在插入新数字时发现已经存在,说明找到了满足要求的数字。

  • 相关阅读:
    在Spring 中如果Girl要Kiss Boy咋办捏?
    对象的序列化
    HibernateHQL
    Struts 动态FORM实现过程
    对struts一点理解总结
    Hibernate Query Language(HQL)。
    Hibernate中Inverse和Cascade
    Spring 中的内部bean 和集合
    设计模式到底离我们有多远
    Aspx页面转静态页面
  • 原文地址:https://www.cnblogs.com/jdneo/p/4745464.html
Copyright © 2011-2022 走看看