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
  • 相关阅读:
    MapReduce -- 统计天气信息
    设计模式--策略模式
    基于物品的协同过滤(二)
    Hadoop应用开发,常见错误
    基于物品的协同过滤(一)
    基于用户的协同过滤
    MapReduce开发程序,运行环境配置
    3DES加解密 C语言
    js获取对象位置的方法
    icheck.js的一个简单demo
  • 原文地址:https://www.cnblogs.com/immjc/p/7797706.html
Copyright © 2011-2022 走看看