划分字母区间
class Solution {
public:
vector<int> partitionLabels(string s) {#
vector<int> res;
unordered_map<char,int> m;
for(int i=0;i<s.size();i++){
m[s[i]]=i;
}
int start=0;
int end=0;
for(int i=0;i<s.size();i++){
end=max(end,m[s[i]]);
if(i==end){
res.push_back(end-start+1);
start=end+1;
}
}
return res;
}
};
分割数组为连续子序列
class Solution {
public:
bool isPossible(vector<int>& nums) {
unordered_map<int,int> cnt,sub;
for(int n:nums){
cnt[n]++;
}
for(int n:nums){
if(!cnt[n])
continue;
if(sub[n-1]){
cnt[n]--;
sub[n-1]--;
sub[n]++;
}
else if(cnt[n+1]&&cnt[n+2]){
cnt[n]--;
cnt[n+1]--;
cnt[n+2]--;
sub[n+2]++;
}
else
return false;
}
return true;
}
};