• Java实现 LeetCode 659 分割数组为连续子序列 (哈希)


    659. 分割数组为连续子序列

    输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数。返回你是否能做出这样的分割?

    示例 1:

    输入: [1,2,3,3,4,5]
    输出: True
    解释:
    你可以分割出这样两个连续子序列 :
    1, 2, 3
    3, 4, 5

    示例 2:

    输入: [1,2,3,3,4,4,5,5]
    输出: True
    解释:
    你可以分割出这样两个连续子序列 :
    1, 2, 3, 4, 5
    3, 4, 5

    示例 3:

    输入: [1,2,3,4,4,5]
    输出: False

    提示:

    输入的数组长度范围为 [1, 10000]

    class Solution {
         public boolean isPossible(int[] nums) {
            Map<Integer, Integer> map = new HashMap<>();
            for (int i : nums) {
                map.put(i, map.getOrDefault(i, 0)+1);
            }
            for (int i : nums) {
                //子数组的元素个数
                int subNum = 0;
                int p = 1;
                //下个元素
                int next = i;
                while (map.getOrDefault(next, 0) >= p) {
                    p = map.get(next);
                    map.put(next, p-1);
                    ++subNum;
                    ++next;
                }
                if (subNum > 0 && subNum < 3) {
                    return false;
                }
            }
            return true;
         }
    }
    
  • 相关阅读:
    c++基础_矩阵乘法
    c++基础_字符串对比
    c++基础_时间转换
    c++基础_特殊回文数
    c++基础_回文数
    c++基础_特殊的数字
    c++基础_杨辉三角形
    c++基础_字母图形
    c++基础_01字串
    java 常用集合类型--以及其特性
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074835.html
Copyright © 2020-2023  润新知