louzhedong / blog

前端基础,深入以及算法数据结构

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

存在重复元素 II

louzhedong opened this issue · comments

习题

出处 LeetCode 算法第219题

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 ij,使得 nums [i] = nums [j],并且 ij 的差的绝对值最大为 k

示例 1:

输入: nums = [1,2,3,1], k = 3
输出: true

示例 2:

输入: nums = [1,0,1,1], k = 1
输出: true

示例 3:

输入: nums = [1,2,3,1,2,3], k = 2
输出: false

思路

用一个Map保存数组项的索引,再次获取到这个数组项时进行比较

解答

JavaScript

var containsNearbyDuplicate = function (nums, k) {
  var map = {};
  var length = nums.length;

  for (var i = 0; i < length; i++) {
    var cursor = nums[i];
    if (cursor in map && Math.abs(map[cursor] - i) <= k) {
      return true;
    } else {
      map[cursor] = i;
    }
  }
  return false;
};

Java

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        int length = nums.length;

        for (int i = 0; i < length; i++) {
            int cursor = nums[i];
            if (map.containsKey(cursor) && Math.abs(map.get(cursor) - i) >= k) {
                return true;
            } else {
                map.put(cursor, i);
            }
        }
        return false;
    }
}