Leetcode每日一题:659.split-array-into-consecutive-subsequences(分割数组为连续子序列)
思路:看它贴的标签是贪心算法,我只想到了记录每个数出现的个数,并且还是数组,后来一想如果元素太大导致数组长度很长怎么办,老是想不到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(分割数组为连续子序列)相关推荐
- leetcode 659. Split Array into Consecutive Subsequences
原题: You are given an integer array sorted in ascending order (may contain duplicates), you need to s ...
- LeetCode 659 Split Array into Consecutive Subsequences
LeetCode Brute Force的方法就是把维护这些字串,每次来新的就加入到符合条件的但是最短的字串中去. 因为不需要求这些字串,可以做一些优化,用字串最后一位数作为key,把长度存入一个di ...
- 【12月打卡~Leetcode每日一题】659. 分割数组为连续子序列(难度:中等)
659. 分割数组为连续子序列 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完成上述分割,则 ...
- LeetCode 659. 分割数组为连续子序列
LeetCode 659. 分割数组为连续子序列 回顾 根据题意,每个元素只会涉及两种情况: 已经存在nums[i]-1结尾的序列,我们把nums[i]接到之前的某个序列后. 尝试以nums[i]为头 ...
- LeetCode 659. 分割数组为连续子序列(哈希)
文章目录 1. 题目 2. 解题 1. 题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完 ...
- Leetcode每日一题:992.sort-array-by-parity-ii(按奇偶排序数组Ⅱ)
思路: 法1:建立一个与原数组同大小的数组res,两次遍历A,偶数放入res的偶下标,奇数放入奇下标: 法2:双指针: 法3:双端队列,遍历A,计数插入前端,偶数插入尾端,然后双指针(1首1尾)对队列 ...
- Leetcode每日一题:941.valid-mountain-array(有效的山脉数组)
思路:先遍历一遍数组,找到最大值max以及最大值索引max_index,然后从此处设立两个指针left和right,一个向左遍历,一个向右遍历,max左右两边应该都是递减的: class Soluti ...
- Leetcode每日一题:剑指 Offer 04.(二维数组中的查找)
思路:有序+查找元素,第一想到的就是二分法,所以我对每行采用二分法,每行的复杂度为O(m),那么总的复杂度就是O(nlogm):看题解从右上角开始,这个数比目标值大,就往左移一列,比目标值小,就往下移 ...
- Leetcode每日一题:167.two-sum-ii-input-array-is-sorted(两数之和Ⅱ-输入有序数组)
解题思路:双指针 l 和 r,分别指向头和尾,对于这个有序数组,如果number[l] + number[r] 比 target大,那么说明选择的r对应元素偏大,将指针 r 左移:如果小于target ...
最新文章
- NBT:牛瘤胃微生物组的参考基因组集
- python float转str
- android 解决String.format多语言存在的问题
- 利用python爬虫(part15)--cookie模拟登陆
- 端午将至……想和程序猿Coding个粽子行不行?
- 100C之13:他该如何存款?
- C#学习笔记之-----倒序输出字符串
- IOS上从第三方页面回跳VUE页面页面不刷新问题
- 使用python进行re拆分网页内容
- C语言实现base64编码,base64解码
- 计算机的论文初稿要交什么,论文初稿
- 青春对白,邮寄我的时光
- Qt深入浅出(一) 从零开始写Qt应用
- java自动装配_Spring中自动装配的4种方式
- C 语言课程设计 最终答辩版 学生通讯录管理系统
- Python练习题 01
- 3的16次方用计算机怎么算,excel2016次方公式怎么用
- 社交媒体视频字幕AE模板 Podcast Badges for After Effects
- Python实战 -- 利用Flask搭建微电影网站(一)蓝图构建
- 不止代码 == 摘读