#include <memory>
#include <vector>
#include <iostream>
std: :vector<int> seq{1, 7, 3, 8, 6, 33, 18, 8, 8, 9999};
void sortGetAndset(std::vector<int> &output)
{
//加写锁
int max = 0;
int min = 0;
for (int i= 0; i != seq.size(); ++i)
{
if (i == 0)
{
max = min = seq[i];
}
if (seq[i] > max)
{
max = seq[i];
}
if (seq[i] < min)
{
min = seq[i];
}
}
std::cout << "max:" << max << ",min:" << min << std::endl;
int size = max - min + 1;
std::unique_ptr<int []> arr(new int[size]());
for (int i = 0; i != seq.size(); ++i)
{
int idx = seq[i] - min;
arr[idx]++;
}
for ( int i = 0; 1 != size; ++i)
{
if (arr[i] > 0)
{
output.push_back( i + min);
if (arr[i] > 1)
output.push_back(i + min); //重复只记一次
}
}
// set 将后5+1个元素reset给源seq
if (seq.size() > 5+1)
{
seq.clear();
seq.assign(output.end() -5-1, output.end());
}
}
int main()
{
std::vector<int> output;
for (int i = 0; i != seq.size(); ++i)
std::cout << seq[i] << ",";
std::cout << std::endl;
sortGetAndSet(output);
for (int i = 0; i != output.size(); ++i)
std::cout << output[i] << ",";
std::cout << std::endl;
for (int i = 0; i != seq.size(); ++i)
std::cout << seq[i] << ",";
std::cout << std::endl;
// 判断不连续或重复
int outputCount = output.size() - 5;
for (int i = 0; i < outputCount; ++i)
{
if (output[i] - output[i-1] != 1)
std::cout << "error:[" <<output[i-1] << "," << output[i] << std::endl;
}
}
// result:
1,7,3,8,6,33,18,8,8,9999,
max:9999,min:1
1,3,6,7,8,8,18,33,9999,
8,8,18,33,9999,
error[1,3]
error[3,6]
 
桶排序并判断不连续或重复:等您坐沙发呢!