题意理解
给定一个数组,可能存在重复,问能否划分出完整的多个k长度的连续子数组,这些子数组合并就可以复原原数组?
问题分析
重复数字,需要用到有序map。
需要在map上遍历两层,一层是全map,一层是k个长度遍历,k个长度遍历,需要记录已经是满足要求的k长度连续子数组的数字。
其他
有点茫
链接
bool isPossibleDivide(vector<int>& nums, int k) {
map<int,int> my_map;
for(auto num : nums) { //转换成红黑树
my_map[num]++;
}
auto base = my_map.begin(); //记录开头
int pre = 0; //记录上一个值
while(base != my_map.end()) { //遍历map
auto it = base;
for(int i = 0; i < k; i++, it++) { //顺序遍历k个数
if(it == my_map.end()) return false; //结尾说明不满足k个数量要求
if(i == 0) { //首位专用与pre赋值
pre = it -> first;
}
else { //其他位置,判断是否顺序及是否数
if(it -> first != pre + 1 || it -> second == 0) return false;
pre++; //前一个数增加1
}
it -> second --; //当前的数量减少1
}
while(base -> second == 0 && base != my_map.end()) base++; //寻找下一个base
}
return true;
}