博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
659. Split Array into Consecutive Subsequences - Medium
阅读量:7313 次
发布时间:2019-06-30

本文共 2082 字,大约阅读时间需要 6 分钟。

You are given an integer array sorted in ascending order (may contain duplicates), you need to split them into several subsequences, where each subsequences consist of at least 3 consecutive integers. Return whether you can make such a split.

Example 1:

Input: [1,2,3,3,4,5]Output: TrueExplanation:You can split them into two consecutive subsequences : 1, 2, 33, 4, 5

Example 2:

Input: [1,2,3,3,4,4,5,5]Output: TrueExplanation:You can split them into two consecutive subsequences : 1, 2, 3, 4, 53, 4, 5

Example 3:

Input: [1,2,3,4,4,5]Output: False 

Note:

  1. The length of the input is in range of [1, 10000]

 

优先把当前的元素放进更短的的数组里(贪心)。

第一次遍历数组:统计频率。

第二次遍历数组:检查当前元素nums[i]是否能加入到现有的数组后面(是否存在以当前元素nums[i] - 1结尾的数组,如果有,加入到长度最短的数组里);如果没有,检查能否创建以该元素开头的新数组;若两种情况都不符合,返回false

detail:用两个hashmap,freq和map,map表示序列以某元素结尾。第二次遍历数组时,如果当前元素nums[i]在map中的key > 0,说明该元素能加入到现有的数组后面;如果当前元素nums[i]在map中不存在,检查该元素接下来连续的两个数字在freq中的value是否 > 0,都大于0说明可以以该元素开头的新数组,在freq中对应key的value减1,并在map中加入consecutive的第三个数字,表示这个数组的末尾,以备下次检查数组元素能否加入到现有数组后面。如果以上两种情况都不符合,返回false。

例如<1,2,3,3,4,5>,

时间:O(N),空间:O(N)

class Solution {    public boolean isPossible(int[] nums) {        if(nums == null || nums.length < 3) return false;        HashMap
freq = new HashMap<>(); HashMap
map = new HashMap<>(); for(int n : nums) freq.put(n, freq.getOrDefault(n, 0) + 1); for(int n : nums) { if(freq.get(n) == 0) continue; else if(map.getOrDefault(n, 0) > 0) { map.put(n, map.get(n) - 1); map.put(n + 1, map.getOrDefault(n + 1, 0) + 1); } else if(freq.getOrDefault(n + 1, 0) > 0 && freq.getOrDefault(n + 2, 0) > 0) { freq.put(n + 1, freq.get(n + 1) - 1); freq.put(n + 2, freq.get(n + 2) - 1); map.put(n + 3, map.getOrDefault(n + 3, 0) + 1); } else return false; freq.put(n, freq.get(n) - 1); } return true; }}

 

转载于:https://www.cnblogs.com/fatttcat/p/9990164.html

你可能感兴趣的文章
移动平台对 META 标签的定义
查看>>
Linux之od命令详解
查看>>
day1
查看>>
详解jar命令打包生成双击即可运行的Java程序
查看>>
Shell脚本(一)
查看>>
Linux 程序包管理 rpm yum dnf
查看>>
比较好用的硬盘格式化恢复软件
查看>>
创建数据库(表)
查看>>
IPSEC协议
查看>>
MySQL必知必会面试题(二)
查看>>
CMS垃圾回收过程
查看>>
c#中的继承
查看>>
linux 三剑客老三-grep
查看>>
win7 使用emeidter后无法右键新建记事本
查看>>
SaltStack之sls文件
查看>>
简单搭建LNMP平台
查看>>
记《浪潮之巅》-第一版-6.IT业的罗马帝国--微软,Microsoft
查看>>
苏州市相城区漕湖人民医院虚拟化容灾系统一套
查看>>
Powershell 之收集服务器配置
查看>>
【在线研讨】《敏捷开发用户故事分类与组织结构(三期-3)》
查看>>