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


    # 该题的标签为 1.堆    2. 贪心算法

    目前还不知道用堆怎么解,本文只介绍贪新算法

    1. 使用贪心解法比较简单。但是看了好多解释都说得不是很明白。

    2. 本文对其进行个人的解释:

        建立两个HashMap:

         2.1  numCounts: 用来统计nums数据中出现的个数

         2.2  numNeededCounts:用来记录被需要的数的个数

         其中2.1比较好理解,我们来理解2.2,什么是被需要的数的个数?

         比如上图中,我们扫描完了1,2,3 此时我们希望下一个数,需要 4,

         那么就在numNeededCounts 中记录一下 (4,1)表示需要4 一次

    3. 看代码,里面有详细注释:

        

     1 class Solution {
     2     public boolean isPossible(int[] nums) {
     3         HashMap<Integer, Integer> numCounts = new HashMap<>();
     4         HashMap<Integer, Integer> numNeededCounts = new HashMap<>();
     5         // 统计出现的次数
     6         for (int x : nums) {
     7             numCounts.merge(x, 1, Integer::sum);
     8         }
     9         for (int x : nums) {
    10             // 一次扫描数组
    11             if (numCounts.get(x) == 0) {
    12                 continue;
    13             } else if (numNeededCounts.getOrDefault(x, 0) > 0) {
    14                 // 当前取出的数,如果在被需要的数中,则-1
    15                 numNeededCounts.merge(x, -1, Integer::sum);
    16                 // 当该数被需要了,说明该数的下一个数应该也被需要
    17                 numNeededCounts.merge(x + 1, 1, Integer::sum);
    18             } else if (numCounts.getOrDefault(x + 1, 0) > 0 && numCounts.getOrDefault(x + 2, 0) > 0) {
    19                 // 判断给定的x,在nums 中有没有x+1,x+2
    20                 // 如果有 则消耗掉 -1
    21                 numCounts.merge(x + 1, -1, Integer::sum);
    22                 numCounts.merge(x + 2, -1, Integer::sum);
    23                 // 消耗之后,记录,下一个需要的数
    24                 numNeededCounts.merge(x + 3, 1, Integer::sum);
    25             } else {
    26                 // 上面都不满足时返回 false
    27                 return false;
    28             }
    29             // 将当前数 消耗 -1
    30             numCounts.merge(x, -1, Integer::sum);
    31         }
    32         return true;
    33 
    34     }

        

  • 相关阅读:
    多元线性回归(pandas/scikit-learn)
    hive查询语法
    Python日志记录(Logging)
    python调用C/C++动态链接库和jython
    MacPorts的安装和使用
    python多进程(multiprocessing)
    Z-Score数据标准化处理(python代码)
    皮尔逊相关系数的计算(python代码版)
    参考书籍
    MFC 之ActiveX控件学习
  • 原文地址:https://www.cnblogs.com/infoo/p/11923128.html
Copyright © 2020-2023  润新知