zoukankan      html  css  js  c++  java
  • [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 absolute difference between i and j is at most k.

    按照题意使用两层for循环进行判断。结果超时了。附上超时代码,便于理解题意。

    class Solution {
    public:
        bool containsNearbyDuplicate(vector<int>& nums, int k) {
            int n = nums.size();
            if (n < 2 || k <= 0)
                return false;
            for (int i = 0; i < n; i++) {
                for (int j = i + 1; j <= i + k && j < n; j++) {
                    if (nums[i] == nums[j])
                        return true;
                }
            }
            return false;
        }
    };
    // TLE
    TLE

    使用map来存储元素值与索引之间的关系,键:元素值,值:索引值。
    遍历数组中的每一个元素,如果可以找到map中元素,判断map中元素与此时数组元素索引之差是否小于等于k。

    class Solution {
    public:
        bool containsNearbyDuplicate(vector<int>& nums, int k) {
            int n = nums.size();
            if (n < 2 || k <= 0)
                return false;
            unordered_map<int, int> m;
            for (int i = 0; i < n; i++) {
                if (m.count(nums[i]) != 0 && i - m[nums[i]] <= k)
                    return true;
                else
                    m[nums[i]] = i;
            }
            return false;
        }
    };
    // 22 ms
  • 相关阅读:
    算术入门之加减乘除
    scanf的返回值
    Flutter 开发环境配置
    DbContextOptionsBuilder
    MarkDown 的简单用法
    C# 多线程安全集合类
    .NET Core 中使用 MemoryCache 缓存
    JWT
    什么是跨域?跨域解决方法
    .Net Core 中配置的高级用法
  • 原文地址:https://www.cnblogs.com/immjc/p/7797706.html
Copyright © 2011-2022 走看看