E - Minimizing Difference (CodeForces - 1244E )(最大值和最小值的差)

该博客讲述了如何解决CodeForces上的1244E问题,即在有限的操作次数内调整一组数,使最大值与最小值的差值最小。作者分享了初版代码存在的问题,如过度复杂、遍历不当和考虑不全面等,并提出了简化版的解决方案,采用两个指针i和j分别跟踪最大值和最小值,通过减少最大值或增加最小值来逐步缩小差值,直至达到目标或用完所有操作次数。
摘要由CSDN通过智能技术生成

题意:有n个数,k次操作,接下来给出n个数

           k次操作(每次可使一个数减一或加一)可以不全用完;

           经过这些操作后,求最大值和最小值的差值;

如例一;

4 5
3 1 7 5

有四个数,五次操作(1+1+1)=3;(7-1-1)=5;(只用了四次,最后一次用不用对结果不影响,因为最大值还是5,最小值还是3)差值为5-3=2;

这道题我当初的代码100多行,我第一次打这么多字,事实证明,想的太复杂越容易出错,我连代码都打不对了,

我当初想的是两次遍历,但是我还是每次都从1和n遍历,没有节省时间,反而更复杂,

其二,就是我将数组里的数全部都改变了, 使得每一次都要更新数组,程序更麻烦。

还有就是考虑不全面,我只考虑了有多少数相同并且和比它大一点的数的差值相乘和k比较,没考虑小一点的差值也可以并且也可以直接结束了;

所以这道题较为简便的做法为设一个类似指针的变量 i 和 j (前和后都要有),每次用的时候,不需要加或减数组里的东西,只需要将这些记录下来,然后先减改变最快的,然后 i++ 或 j--;直到最

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值