• [LeetCode] 219. Contains Duplicate II ☆(存在重复元素2)


    每天一算:Contains Duplicate II

    描述

    给出1个整形数组nums和1个整数k,是否存在索引i和j,使得nums[i] == nums[j] 且i和j之间的差不超过k

    Example 1:
    Input: nums = [1,2,3,1], k = 3
    Output: true.

    Example 2:
    Input: nums = [1,0,1,1], k = 1
    Output: true

    Example 3:
    Input: nums = [1,2,3,1,2,3], k = 2
    Output: false

    解析

    考虑用滑动窗口与查找表来解决。

    • 设置查找表record,用来保存每次遍历时插入的元素,record的最大长度为k

    • 遍历数组nums,每次遍历的时候在record查找是否存在相同的元素,如果存在则返回true,遍历结束

    • 如果此次遍历在record未查找到,则将该元素插入到record中,而后查看record的长度是否为k + 1

    • 如果此时record的长度是否为k + 1,则删减record的元素,该元素的值为nums[i - k]

    • 如果遍历完整个数组nums未查找到则返回false

    代码

    public static boolean containsDuplicate2(int[] n, int k) {
            if (n == null || n.length < k) {
                return false;
            }
            List<Integer> list = new ArrayList<>(k);
            for (int i = 0; i < n.length; i++) {
                if (!list.contains(n[i])) {
                    list.add(n[i]);
                    
                    if (list.size() > k) {
                        list.remove(0);
                    }
                } else {
                    return true;
                }
            }
            return false;
        }
  • 相关阅读:
    Android设备驱动安装
    昨晚摆乌龙了
    生活
    SQLSTATE=57019
    IBM项目六
    不吸烟了
    清明短假
    『ExtJS』使用中需要注意的一些事(持续更新)
    『Spring.Net』IoC 容器
    『Spring.Net』为什么使用?
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/11101906.html
Copyright © 2020-2023  润新知