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


文章目录


1.题目

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

给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。

如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1

示例 1:

复制代码
输入:nums = [1,1,4,2,3], x = 5
输出:2
解释:最佳解决方案是移除后两个元素,将 x 减到 0 。

示例 2:

复制代码
输入:nums = [5,6,7,8,9], x = 4
输出:-1

示例 3:

复制代码
输入:nums = [3,2,20,1,1,3], x = 10
输出:5
解释:最佳解决方案是移除后三个元素和前两个元素(总共 5 次操作),将 x 减到 0 。

2.思路

正难则反,通过移除一些元素,使得剩下的元素的和等于 sum(nums) - x,其中 sum(nums) 是数组所有元素的和,那么问题就转化为:找到这个最长子数组,剩余部分的元素就是要移除的,移除的操作数就是 nums.size() - 最长子数组的长度

3.代码

c++ 复制代码
class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        int sum = 0;
        // 计算数组所有元素的总和
        for(int i = 0; i < nums.size(); ++i){
            sum+=nums[i];
        }
        int target = sum - x;
        // 如果 target 小于 0,说明无法通过操作达到目标
        if (target < 0) return -1;
        int left = 0, right = 0, len = -1;
        int cur_sum = 0;
        // 遍历数组,右边界逐步向右扩展窗口
        while(right<nums.size()){
            cur_sum+=nums[right];
            ++right;
            // 如果当前窗口的和大于 target,缩小窗口
            while(cur_sum > target){
                cur_sum-=nums[left];
                ++left;
            }
            // 如果当前窗口的和等于 target,更新最长子数组的长度
            if(cur_sum == target)
                len = max(len, right-left);
        }
        return (len == -1) ? -1 : nums.size() - len;
    }
};

相关推荐
寻寻觅觅☆1 分钟前
东华OJ-基础题-31-素数(C++)
开发语言·c++·算法
仟濹6 分钟前
【算法打卡day36(2026-04-02 周四)】DFS专项训练3
算法·深度优先
B1acktion9 分钟前
2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?
数据结构·算法·排序算法
Mr_Xuhhh12 分钟前
C++算法刷题:排序子序列、削减整数、最长上升子序列(二)题解
开发语言·c++·算法
tankeven14 分钟前
HJ157 剪纸游戏
c++·算法
迈巴赫车主17 分钟前
蓝桥杯 19717 挖矿java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
airuike12322 分钟前
高性能MEMS IMU:机器人自主运动的核心感知中枢
人工智能·算法·机器人
郝学胜-神的一滴24 分钟前
PyTorch张量维度操控:transpose与permute深度拆解与实战指南
人工智能·pytorch·python·深度学习·算法·机器学习
未来之窗软件服务30 分钟前
SenseVoicecpp ggml-cann.cpp大模型[AI人工智能(七十六)]—东方仙盟
人工智能·算法·sensevoice·仙盟创梦ide·东方仙盟
Trouvaille ~1 小时前
零基础入门 LangChain 与 LangGraph(一):理解大模型、提示词、Embedding 和接入方式
算法·langchain·大模型·embedding·rag·langgraph·llm应用