• 1658. Minimum Operations to Reduce X to Zero


    package LeetCode_1658
    
    /**
     * 1658. Minimum Operations to Reduce X to Zero
     * https://leetcode.com/problems/minimum-operations-to-reduce-x-to-zero/
     * You are given an integer array nums and an integer x.
     * In one operation, you can either remove the leftmost or the rightmost element from the array nums and subtract its value from x.
     * Note that this modifies the array for future operations.
    Return the minimum number of operations to reduce x to exactly 0 if it's possible, otherwise, return -1.
    
    Example 1:
    Input: nums = [1,1,4,2,3], x = 5
    Output: 2
    Explanation: The optimal solution is to remove the last two elements to reduce x to zero.
    
    Example 2:
    Input: nums = [5,6,7,8,9], x = 4
    Output: -1
    
    Example 3:
    Input: nums = [3,2,20,1,1,3], x = 10
    Output: 5
    Explanation: The optimal solution is to remove the last three elements and the first two elements (5 operations in total) to reduce x to zero.
    
    Constraints:
    1. 1 <= nums.length <= 105
    2. 1 <= nums[i] <= 104
    3. 1 <= x <= 109
     * */
    class Solution {
        /*
        * solution: Sliding Window, Time complexity:O(n), Space complexity:O(1)
        * 1. finding out the longest sub-array sum up to nums.sum-x,
        * 2. the result is nums.size - sub-array.size,
        * */
        fun minOperations(nums: IntArray, x: Int): Int {
            val target = nums.sum() - x
            var lengthOfSubArray = Int.MIN_VALUE
            var left = 0
            var currentSum = 0
            for (right in nums.indices) {
                currentSum += nums[right]
                while (currentSum > target && left <= right) {
                    currentSum -= nums[left]
                    left++
                }
                if (currentSum == target) {
                    lengthOfSubArray = Math.max(lengthOfSubArray, right - left + 1)
                }
            }
            return if (lengthOfSubArray == Int.MIN_VALUE) -1 else nums.size - lengthOfSubArray
        }
    }
  • 相关阅读:
    Codeforces Round #733
    [ZJOI2007] 时态同步(树形dp)
    最大子树和(树形dp)
    P2015 二叉苹果树
    没有上司的舞会(经典树形dp)
    P3884 [JLOI2009]二叉树问题(LCA)
    Bin Packing Problem(线段树 + multiset)
    P4281 [AHOI2008]紧急集合 / 聚会(最近公共祖先)
    P3128 [USACO15DEC]Max Flow P(LCA 树上差分)
    java中Set接口用法
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13977911.html
Copyright © 2020-2023  润新知