将 x 减到 0 的最小操作数

WuYiCheng666 2025-05-21 23:13:44

#define MIN(a, b) ((a) < (b) ? (a) : (b))

 

int minOperations(int* nums, int numsSize, int x) {

    int sum = 0;

    for (int i = 0; i < numsSize; i++) {

        sum += nums[i];

    }

    if (sum < x) {

        return -1;

    }

 

    int right = 0;

    int lsum = 0, rsum = sum;

    int ans = numsSize + 1;

 

    for (int left = -1; left < numsSize; ++left) {

        if (left != -1) {

            lsum += nums[left];

        }

        while (right < numsSize && lsum + rsum > x) {

            rsum -= nums[right];

            ++right;

        }

        if (lsum + rsum == x) {

            ans = MIN(ans, (left + 1) + (numsSize - right));

        }

    }

    return ans > numsSize ? -1 : ans;

}

...全文
7 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

118

社区成员

发帖
与我相关
我的任务
社区描述
这里专为新疆政法学院的探索者而建,英雄不问出处。起跑线是起点,热忱与坚持为加速器,无论bug缠身的项目,还是攻克的算法顿悟,每滴汗水皆被珍藏。执炬前行,终将照亮彼此峰顶,我们携手同行。
课程设计笔记经验分享 高校 新疆·图木舒克市
社区管理员
  • 雲中203
  • SHAO060706
  • Poeir_
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

英雄不问出处

试试用AI创作助手写篇文章吧