zoukankan      html  css  js  c++  java
  • 20.12.4 leetcode659

    题目链接:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/

    题意:给你一个有序数组,是否可以将这个数组分成1个或多个序列,每个序列都是长度大于等于3的连续整数数组。

    分析:用贪心的思想,对一个数x来说,当存在以x-1结尾的大于3的序列时,最好的选择是加入前面的序列,而不是以自己为头重新建一个序列(这样新建的序列长度就为1了),也就是说,当我们处理一个数时,有些判断存不存在以x-1为结尾的序列,存在的话就加入它,不存在的话就看x+1,x+2存在不存在,存在的话就自己新建一个,不存在的话就说明不可能按要求分序列了。

    class Solution {
    public:
        bool isPossible(vector<int>& nums) {
            unordered_map<int,int> countMap;
            unordered_map<int,int> endMap;
            for(auto& x:nums){
                countMap[x]++;
            }
            for(auto& x:nums){
                if(countMap[x]){
                    if(endMap[x-1]){
                        countMap[x]--;
                        endMap[x]++;
                        endMap[x-1]--;
                    }else{
                        if(countMap[x+1]&&countMap[x+2]){
                            countMap[x]--;
                            countMap[x+1]--;
                            countMap[x+2]--;
                            endMap[x+2]++;
                        }
                        else    return false;
                    }
                }
            }
            return true;
        }
    };
  • 相关阅读:
    常见的arp欺骗
    ARP欺骗分析
    周总结
    周总结
    周总结
    win10下 修改host文件 新添域名不生效
    周总结
    周总结
    周总结
    周总结
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/14087497.html
Copyright © 2011-2022 走看看