索引请参考:系列目录
题目:
- 牛牛的老师给出一个区间的定义:对于X<=y,[x , y]表示x到y之间(包括x和y)的所有连续整数集合
- 如:[3 , 3] = {3}, [4,7] = {4, 5, 6, 7}
- 牛牛现在有一个长度为n的递增序列,牛牛想知道需要多少个区间合并起来等于这个序列。
- 示例:输入{1,2,3,4,5,6,7,8,9,10}
- 输出:1
- 示例:输入{1,3,5,6},输出3
分析:
- (1)数组特征:递增序列
- (2)条件:只要最后一个元素减去前一个元素大于1,则这两个元素需要两个区间组成了
- (3)依次类推,直到最后
代码:
#include<vector>
#include<iostream>
int numberSerail(std::vector<int>&arr);
int main()
{
int size;
std::cin>>size;
std::vector<int>arr;
for(int i = 0; i < size;++i)
{
int temp;
std::cin>>temp;
arr.push_back(temp);
}
int result = numberSerail(arr);
std::cout<<result<<std::endl;
return 0;
}
int numberSerail(std::vector<int>&arr){
if(arr.empty())
return 0;
auto begin = arr.begin();
auto end = arr.end();
int ret = 0;
while(begin < end)
{
int a = *begin;
int b = *(++begin);
if(b - a > 1)
++ret;
}
++ret;
return ret;
}
牛客运行结果:

评注:本题是爱奇艺在牛客平台上进行的考试题目,答题模式为ACM,所以需要把代码全部写出来。有更好的方法的话欢迎交流。
博客围绕一个算法题目展开,给定一个递增序列,要计算合并成该序列所需的区间数量。分析了数组递增特征及判断区间的条件,即后一元素减前一元素大于1时需两个区间。还提到这是爱奇艺牛客考试题目,答题为ACM模式。
1959

被折叠的 条评论
为什么被折叠?



