本文主要是介绍Split Array into Consecutive Subsequences问题及解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
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;}
};
这篇关于Split Array into Consecutive Subsequences问题及解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!