爱奇艺2019面试题真题

博客围绕一个算法题目展开,给定一个递增序列,要计算合并成该序列所需的区间数量。分析了数组递增特征及判断区间的条件,即后一元素减前一元素大于1时需两个区间。还提到这是爱奇艺牛客考试题目,答题为ACM模式。

索引请参考:系列目录
题目:

  • 牛牛的老师给出一个区间的定义:对于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,所以需要把代码全部写出来。有更好的方法的话欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值