当前位置:首页 > 编程笔记 > 正文
已解决

leetcode1658. 将 x 减到 0 的最小操作数

来自网友在路上 172872提问 提问时间:2023-10-24 01:15:56阅读次数: 72

最佳答案 问答题库728位专家为你答疑解惑

题目链接:1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

知道滑动窗口,代码却写不出来

#define MIN(a ,b) ((a) < (b) ? (a) : (b))int minOperations(int* nums, int numsSize, int x)
{int ans = INT_MAX;int sum = 0;for (int i = 0; i < numsSize; i++) {sum += nums[i];}if (sum < x) {return -1;}int left = -1;int right = 0;int lsum = 0; // left为-1,左边数组为空,前缀和为0int rsum = sum; // right为0,右边选中整个数组,后缀和为数组和sumwhile (left < numsSize) {if (left != -1) {lsum += nums[left]; // 更新前缀和}while (right < numsSize && lsum + rsum > x) {rsum -= nums[right++]; // 前缀和后缀和相加大于x,缩小右数组}if (lsum + rsum == x) {ans = MIN(ans, left + 1 + numsSize - right); // 更新最小操作数}left++;}return ans == INT_MAX ? -1 : ans;
}

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"leetcode1658. 将 x 减到 0 的最小操作数":http://eshow365.cn/6-22853-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!