美文网首页
LeetCode 第 1658 题:将 x 减到 0 的最小操作

LeetCode 第 1658 题:将 x 减到 0 的最小操作

作者: 放开那个BUG | 来源:发表于2024-04-28 18:21 被阅读0次

1、前言

题目描述

2、思路

这道题其实是逆向思维,找到原数组中最长的窗口(就是 sum - x 的值),数组长度减最长窗口,就是最小操作数。
但是有些 base case 特别恶心。

3、代码

class Solution {
    public int minOperations(int[] nums, int x) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        int target = sum - x;
        if(target < 0){
            return -1;
        }
        int len = nums.length;
        List<Integer> window = new ArrayList<>();
        int winSum = 0, maxWinLen = -1;
        for (int num : nums) {
            window.add(num);
            winSum += num;
            while (winSum > target){
                Integer remove = window.remove(0);
                winSum -= remove;
            }
            if(winSum == target){
                maxWinLen = Math.max(maxWinLen, window.size());
            }
        }

        return maxWinLen < 0 ? -1 : len - maxWinLen;
    }
}

相关文章

网友评论

      本文标题:LeetCode 第 1658 题:将 x 减到 0 的最小操作

      本文链接:https://www.haomeiwen.com/subject/ddfmkdtx.html