• letcode每日一题- 分割数组为连续子序列


    题目描述如下:

    对于数组中的元素 x,如果存在一个子序列以 x-1 结尾,则可以将 x加入该子序列中。将 x 加入已有的子序列总是比新建
    一个只包含 x 的子序列更优,因为前者可以将一个已有的子序列的长度增加 1,而后者新建一个长度为 1 的子序列,而题
    目要求分割成的子序列的长度都不小于 3,因此应该尽量避免新建短的子序列。
    基于此,可以通过贪心的方法判断是否可以完成分割。
    使用两个哈希表,第一个哈希表存储数组中的每个数字的剩余次数,第二个哈希表存储数组中的每个数字作为结尾的子序列
    的数量。
    代码实现如下:

    
    public boolean isPossible(int[] nums) {
            Map<Integer, Integer> numMap = new HashMap<>();
            Map<Integer, Integer> endMap = new HashMap<>();
            for (int x : nums) {
                //统计出现次数
                numMap.put(x, numMap.getOrDefault(x, 0) + 1);
            }
            for (int x : nums) {
                int count = numMap.getOrDefault(x, 0);
                if (count > 0) {
                    int prevEndCount = endMap.getOrDefault(x - 1, 0);
                    if (prevEndCount > 0) {
                        //并入老队列
                        numMap.put(x, count - 1);
                        endMap.put(x - 1, prevEndCount - 1);
                        endMap.put(x, endMap.getOrDefault(x, 0) + 1);
                    } else {
                        //创建新队列
                        int count1 = numMap.getOrDefault(x + 1, 0);
                        int count2 = numMap.getOrDefault(x + 2, 0);
                        if (count1 > 0 && count2 > 0) {
                            numMap.put(x, count - 1);
                            numMap.put(x + 1, count1 - 1);
                            numMap.put(x + 2, count2 - 1);
                            endMap.put(x + 2, endMap.getOrDefault(x + 2, 0) + 1);
                        } else {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
    
    
  • 相关阅读:
    浅谈Android内存管理
    adb 常用命令
    ElasticSearch+Logstash+Filebeat+Kibana集群日志管理分析平台搭建
    分布式版本控制系统GIT的使用
    KVM虚拟化原理与基础应用示例
    Nginx反代Mogilefs分布式储存示例
    Redis持久化存储与复制功能简述
    Redis服务搭建与基础功能示例
    常用的NoSQL数据库类型简述
    XtraBackup的备份原理与应用示例
  • 原文地址:https://www.cnblogs.com/MissWX/p/14084838.html
Copyright © 2020-2023  润新知