思路:看它贴的标签是贪心算法,我只想到了记录每个数出现的个数,并且还是数组,后来一想如果元素太大导致数组长度很长怎么办,老是想不到hash的方法,也没想到记录以nums[i]结尾的连续子序列个数;
贴上大佬的回答:


这里一定不要把tail[nums[i]+1]、tail[nums[i]+2] 和tail[nums[i+1]]、tail[nums[i+2]]混淆

class Solution {public:bool isPossible(vector<int> &nums){int len = nums.size();if (len < 3)return false;unordered_map<int, int> count; //记录每个数字出现的个数unordered_map<int, int> tail;  //记录以数字nums[i]结尾的子序列个数for (int i = 0; i < len; i++){count[nums[i]]++;}for (int i = 0; i < len; i++){if (count[nums[i]] == 0)continue;//优先考虑把nums[i]加到已存在的子序列中if (count[nums[i]] > 0 && tail[nums[i] - 1] > 0){tail[nums[i] - 1]--;tail[nums[i]]++;count[nums[i]]--;}//没有子序列就让它们三个创建子序列else if (count[nums[i]] > 0 && count[nums[i] + 1] > 0 && count[nums[i] + 2] > 0){tail[nums[i] + 2]++;count[nums[i]]--;count[nums[i] + 1]--;count[nums[i] + 2]--;}else{return false;}}return true;}
};

Leetcode每日一题:659.split-array-into-consecutive-subsequences(分割数组为连续子序列)相关推荐

  1. leetcode 659. Split Array into Consecutive Subsequences

    原题: You are given an integer array sorted in ascending order (may contain duplicates), you need to s ...

  2. LeetCode 659 Split Array into Consecutive Subsequences

    LeetCode Brute Force的方法就是把维护这些字串,每次来新的就加入到符合条件的但是最短的字串中去. 因为不需要求这些字串,可以做一些优化,用字串最后一位数作为key,把长度存入一个di ...

  3. 【12月打卡~Leetcode每日一题】659. 分割数组为连续子序列(难度:中等)

    659. 分割数组为连续子序列 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完成上述分割,则 ...

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

    LeetCode 659. 分割数组为连续子序列 回顾 根据题意,每个元素只会涉及两种情况: 已经存在nums[i]-1结尾的序列,我们把nums[i]接到之前的某个序列后. 尝试以nums[i]为头 ...

  5. LeetCode 659. 分割数组为连续子序列(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完 ...

  6. Leetcode每日一题:992.sort-array-by-parity-ii(按奇偶排序数组Ⅱ)

    思路: 法1:建立一个与原数组同大小的数组res,两次遍历A,偶数放入res的偶下标,奇数放入奇下标: 法2:双指针: 法3:双端队列,遍历A,计数插入前端,偶数插入尾端,然后双指针(1首1尾)对队列 ...

  7. Leetcode每日一题:941.valid-mountain-array(有效的山脉数组)

    思路:先遍历一遍数组,找到最大值max以及最大值索引max_index,然后从此处设立两个指针left和right,一个向左遍历,一个向右遍历,max左右两边应该都是递减的: class Soluti ...

  8. Leetcode每日一题:剑指 Offer 04.(二维数组中的查找)

    思路:有序+查找元素,第一想到的就是二分法,所以我对每行采用二分法,每行的复杂度为O(m),那么总的复杂度就是O(nlogm):看题解从右上角开始,这个数比目标值大,就往左移一列,比目标值小,就往下移 ...

  9. Leetcode每日一题:167.two-sum-ii-input-array-is-sorted(两数之和Ⅱ-输入有序数组)

    解题思路:双指针 l 和 r,分别指向头和尾,对于这个有序数组,如果number[l] + number[r] 比 target大,那么说明选择的r对应元素偏大,将指针 r 左移:如果小于target ...

最新文章

  1. NBT:牛瘤胃微生物组的参考基因组集
  2. python float转str
  3. android 解决String.format多语言存在的问题
  4. 利用python爬虫(part15)--cookie模拟登陆
  5. 端午将至……想和程序猿Coding个粽子行不行?
  6. 100C之13:他该如何存款?
  7. C#学习笔记之-----倒序输出字符串
  8. IOS上从第三方页面回跳VUE页面页面不刷新问题
  9. 使用python进行re拆分网页内容
  10. C语言实现base64编码,base64解码
  11. 计算机的论文初稿要交什么,论文初稿
  12. 青春对白,邮寄我的时光
  13. Qt深入浅出(一) 从零开始写Qt应用
  14. java自动装配_Spring中自动装配的4种方式
  15. C 语言课程设计 最终答辩版 学生通讯录管理系统
  16. Python练习题 01
  17. 3的16次方用计算机怎么算,excel2016次方公式怎么用
  18. 社交媒体视频字幕AE模板 Podcast Badges for After Effects
  19. Python实战 -- 利用Flask搭建微电影网站(一)蓝图构建
  20. 不止代码 == 摘读

热门文章

  1. POJ 2104 划分树
  2. Spring+CXF的WebServices简单示例
  3. ExtJs - grid 合并单元格 跨行跨列
  4. 效率低的日子怎么办?
  5. Flume之Source
  6. CSS Day04 css核心基础
  7. Mysql事件的创建和使用
  8. WinForm皮肤控件(SkinEngine)
  9. DevExpress xtraTabbedMdiManager控件双击关闭MDI标签页
  10. SPGridview的使用