Leetcode题解 219. Contains Duplicate II

来源:互联网 发布:ubuntu15.10安装mysql 编辑:程序博客网 时间:2024/06/06 04:21

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 j is at most k.

用hashMap 不能重复获取hashMap.get(nums[i]) 容易超时
解法一

public class Solution {    public boolean containsNearbyDuplicate(int[] nums, int k) {         if (nums.length <= 1) {            return false;        }        HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();        for (int i = 0; i < nums.length; i++) {            if (hashMap.containsKey(nums[i]) && i - hashMap.get(nums[i]) <= k) {                return true;            }            hashMap.put(nums[i], i);        }        return false;    }}

解法二:

public class Solution {    public boolean containsNearbyDuplicate(int[] nums, int k) {         if(nums==null || nums.length<2) return false;           Map<Integer, Integer> map = new HashMap<Integer, Integer>();          for(int i=0; i<nums.length; i++) {              Integer num=map.get(nums[i]);            if(num!=null) {                  int j = num;                  if(i-j<=k) return true;                  map.put(nums[i],i);            } else {                  map.put(nums[i], i);              }          }          return false;     }}
0 0