LeetCode每日一题:LeetCode 798. 得分最高的最小轮调

LeetCode 798. 得分最高的最小轮调

不等式推到出每个数论调不加分的区间,如果最后累加的不加分区间最少,那就是论调加分最多。通过差分数组维护不加分的区间。
不等式推到如下:
i − k < a [ i ] i-k<a[i] ik<a[i] && 0 < = i − k < = n − 1 0<=i-k<=n-1 0<=ik<=n1
得出范围为: i − a [ i ] + 1 < = k a n d k < = i i-a[i]+1<=k and k<=i ia[i]+1<=kandk<=i

class Solution {
public:
    int bestRotation(vector<int>& A) {
        int n = A.size();
        vector<int> b(n + 1);
        for (int i = 0; i < n; i ++ ) {
            int l = i - A[i] + 1, r = i;
            if (l >= 0) {
                b[l] ++ , b[r + 1] --;
            }
            else {
                b[0] ++ , b[r + 1] -- ;
                b[l + n] ++ , b[n] -- ;
            }
        } 

        int res = INT_MAX, k = 0;
        for (int i = 0, sum = 0; i < n; i ++ ) {
            sum += b[i];
            if (sum < res) {
                res = sum;
                k = i;
            }
        }
        return k;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shirandexiaowo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值