leetcode 219:Contains Duplicate II

題目:
Given an array of integers and an integer k, find out whether there 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.
分析:
這道題目考察的是數組的操作,給定一個數組和一個整數k,要求判斷數組元素在k步返回內時候有重複元素,採用雙層for循環的話時間複雜度是O(nk),k=n,n-1,n-2…如果採用hashmap,算法時間複雜度則降爲O(n).
代碼:

import java.util.HashMap;
import java.util.Map;

public class ContainsDuplicate {
public static boolean containsNearbyDuplicate2(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++) { 
                if(map.containsKey(nums[i])) {  
                    int j = map.get(nums[i]);  
                    if(i-j<=k) return true;  
                } 
                map.put(nums[i],i);
            }  
            return false;  
     }
     public static void main(String[] args){
         int[] a={0,2,3,-1,2,2};
         boolean result=containsNearbyDuplicate2(a,1);
         System.out.println("result:"+result);
     }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章