Split Array into Consecutive Subsequences问题及解法

xiaoxiao2021-02-28  26

问题描述:

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.

示例:

Input: [1,2,3,3,4,5] Output: True Explanation: You can split them into two consecutive subsequences : 1, 2, 3 3, 4, 5 Input: [1,2,3,3,4,4,5,5] Output: True Explanation: You can split them into two consecutive subsequences : 1, 2, 3, 4, 5 3, 4, 5 Input: [1,2,3,4,4,5] Output: False

Note:

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

问题分析:

参考大神的博客:https://www.cnblogs.com/pk28/p/7384602.html

对于任何一个数,要么它能添加进现在有的分割中去,要么它能形成新的分割,如果两种情况都不满足,那么该数组不能形成有效的分割。

过程详见代码:

class Solution { public: bool isPossible(vector<int>& nums) { int n = nums.size(); if (n < 3) return false; unordered_map<int, int> mp, mp2; for (int i = 0; i < n; ++i) mp[nums[i]]++; for (int i = 0; i < n; i++) { int x = nums[i]; if (mp[x] <= 0) continue; if (mp2[x - 1] > 0) mp[x]--, mp2[x - 1]--, mp2[x]++; else if (mp[x + 1] >0 && mp[x + 2] > 0) { mp[x]--, mp[x + 1]--, mp[x + 2]--; mp2[x + 2]++; } else return false; } return true; } };

转载请注明原文地址: https://www.6miu.com/read-1450251.html

最新回复(0)