leetcode219~Contains Duplicate II

来源:互联网 发布:快餐店数据流程图 编辑:程序博客网 时间:2024/06/17 03:43

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

一般数组的问题,在不使用排序时,通常的解法是使用集合map或者set,或者使用双指针(一个负责遍历 一个负责记录并更新)。

public class ContainsDuplicateII {    //使用hashmap集合 键值分别存储元素值和对应的下标     public boolean containsNearbyDuplicate(int[] nums, int k) {         Map<Integer,Integer> map = new HashMap<>();         for(int i=0;i<nums.length;i++) {            if(map.containsKey(nums[i])) {                int diff = i-map.get(nums[i]);                if(diff<=k) {                    return true;                } else {                    map.put(nums[i], i); //更新下标                }            } else {                map.put(nums[i], i);            }         }         return false;     }     //使用set集合  利用set集合在add时,如果集合中没有包含该元素,则返回true     public boolean containsNearbyDuplicate2(int[] nums, int k) {         Set<Integer> set = new HashSet<Integer>();         for(int i=0;i<nums.length;i++) {             if(i>k) { //如果大于k,则移除k之前的元素                 set.remove(nums[i-k-1]);             }             if(!set.add(nums[i])) {                 return true;             }         }         return false;     }}
0 0
原创粉丝点击