Skip to content

存在重复元素 II #158

Open
Open
@louzhedong

Description

习题

出处 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;
    }
}

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions