IncDec Sequence

链接

既然题目要求最终所有数字都要相等,是不是意味着所有数字只差为0?

依据于此,我们可以创建一个长度为n的数组,第一个元素就是题目输入的第一个值,往后都是差值

比如2 3 4 5 7 4得到的结果是2 1 1 1 2 -3目标(? 0 0 0 0 0,第一个元素不确定)

我们对区间[l,r]进行操作,会发现新数组l和r+1的元素进行了改变,l的改变与操作相同,r+1则相反

特别的,如果r位于最后一位,那么新数组只有l进行了更改

我们发现了规律:操作时新数组只有至多两个元素改变,而且两个元素改变相反(一个加一,另一个减一),如果只改变一个元素,我们可以进行加一或减一

不难想到,同时对正数负数操作是最快的,刚刚那个数组我们可以让前面的整数减一,后面的负数加一

这样,我们操作3次可以得到 2 0 0 0 2 0(当然2 1 1 0 0 0也行,只要满足第一个元素后面相加为2即可),此时我们可以更改两个也可以更该一个(更改两个是第一个元素加一,后面的2减一,更改一个是后面的2减一,第一个不变)

不难看出,最终答案有3种(均为2,3或4),更改次数为3+2=5种

总结规律,更改次数为第一个元素之后的正数和与负数和的最大值,即max(正数,|负数|), 种数为(|正数-|负数||+1)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    
    vector<long long>num(n),diff(n);
    for(int i=0;i<n;i++){
       cin>>num[i];
        if(i==0)diff[i]=num[i];
        else diff[i]=num[i]-num[i-1];
    }
    long long sum=0,negative=0;
    for(int i=1;i<n;i++){
        sum+=abs(diff[i]);
        negative+=diff[i]<0?-diff[i]:0;
    }
    cout<<max(sum-negative,negative)<<endl;
    cout<<abs(sum-2*negative)+1<<endl;
    
}

时间复杂度:O(n)

空间复杂度:O(n)

全部评论

相关推荐

12-09 01:17
已编辑
湖南工程学院 Java
(项目是苍穹外卖和仿12306)1&nbsp;自我介绍2&nbsp;是否参加过实习3&nbsp;项目拷打(讲一下值得讲的项目,讲一下你对sentinel的认识,底层原理以及设计思路)4&nbsp;concurrentHashmap相对于普通的HashMap有什么特点,在什么场景下会做加锁5&nbsp;有了解过renntrantlock吗,和syc比较一下6&nbsp;就是如果给你一段慢查询,你是从哪些方面入手去做性能优化7&nbsp;索引的底层数据结构是什么8&nbsp;为什么要满足最左匹配原则才能让这个索引失效吗?9&nbsp;开窗查询10&nbsp;写一个自定义的一个注解吗?11&nbsp;有在项目里面去去调用三方接口吗12&nbsp;项目中一般是用什么组件去发送这个http请求的13&nbsp;简单介绍一webShocked是怎么去发送请求的14&nbsp;有没有听说过一个叫redissTemplate的15&nbsp;那如果在项目中要使用redis的话,要做哪些配置呢16&nbsp;如何在redis自定义序列化器17&nbsp;Redis有哪些数据结构18&nbsp;有没有了解设计模式19&nbsp;mybatis查询缓存结构20&nbsp;mybatis的几大基本组件21&nbsp;如何实现一个拦截器22&nbsp;有了解过kafka吗23&nbsp;为什么项目用rocketmq而不是kafka24&nbsp;反问总结:面试官很耐心,问的八股偏多,我有很多问题回答的一般个人不足:1&nbsp;八股学习的不够深入,没有完全了解底层原理,不能很好地记忆下来,问到关于mybatis时只记得概念并没有完整回答出来,还有concurrentHash虽然回答出来了,但是比较支支吾吾,说明理解不够深入…2&nbsp;还有些知识盲区,kafka和设计模式等不会3&nbsp;对项目的技术栈学习不够重视,经不住拷打4&nbsp;回答问题时太紧张,支支吾吾,脑子里只记得概念,不知道从哪里说起,每次说的话都不能完整流畅说出来要提高的地方1&nbsp;加强深入学习,背八股的同时去看相关视频讲解了解底层原理,不是死记硬背2&nbsp;扩大学习范围,学习设计模式等3&nbsp;多去了解项目所用到技术栈的底层原理,与业务结合4&nbsp;背八股的时候要想一下面试的时候该怎么完整的回答问题,想一下怎么完成回答的逻辑
查看25道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务