最长连续序列
输出最长连续序列值及序列本身
代码有不懂的欢迎留言或私信,很乐意和大家探讨
如果有写的不够好的,或者有可以改善的地方,也欢迎大家指出
代码如下:
//unordered_map,key存放连续序列长度,vector<int>存放序列
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <string>
class Solution
{
public:
int lxu(std::vector<int>& num)
{
//std::vector<int> shuzu = num;
std::vector<int> cun;//存放连续序列
std::unordered_map<int, std::vector<int>> um;
//sort(shuzu.begin(), shuzu.end());
sort(num.begin(), num.end());//先排序,从小到大
char m[10] = {0};//存放count
int count = 0;//每个连续序列的长度
int z = 0;//标记符,每个连续序列开始的时候置1,结束的时候置0
int j = 0;//辅助m[]数组存放count
int max = 0;//最大连续序列的长度
//int y = 0;
for (int i = 0; i < num.size(); i++)
{
if (i + 1 < num.size() && num[i] != num[i+1])
{
if (num[i] + 1 == num[i + 1])
{
cun.push_back(num[i]);
count++;
z = 1;
}
if (z == 1 && num[i] + 1 != num[i + 1])
{
cun.push_back(num[i]);//记
count++;
//um[count].push_back(cun);
um.emplace(make_pair(count, cun));
std::vector<int>().swap(cun);
m[j] = count;
j++;
count = 0;
z = 0;
//y = i;
}
if (num[i] + 1 == num[i + 1] && i + 1 == num.size() - 1)
{
cun.push_back(num[i+1]);
count++;
um.emplace(make_pair(count, cun));
//std::vector<int>().swap(cun);
/*用来输出cun数组里面的值,检查是否将数字传入cun数组,方便检查bug
for (std::vector<int>::iterator it = cun.begin(); it != cun.end(); ++it)
{
std::cout << "cun" << *it << " ";
}
*/
m[j] = count;
}
}
}
for (int i = 0; i < sizeof(m); i++)
{
max = m[0];
if (m[i] < m[i + 1])
{
max = m[i + 1];
}
}
if (m[0] == 0)//输出的序列无连续,都是单个值
{
max = 1;
}
std::cout << "最长连续序列值:" << max << std::endl;
std::vector<int> v= um[max];
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
std::cout << *it << " ";
}
return max;
}
};
int main()
{
Solution slu;
std::vector<int> nums = { 0,3,7,2,5,8,4,6,0,1 };
int n;
// { 3,7,11,5,8,4,6,0,1 }
//char m[4] = { 1,2,3,4 };
/*
do
{
std::cin >> n;
nums.push_back(n);
} while (getchar() != '\n');
*/
slu.lxu(nums);
}