当前位置: 首页 > news >正文

Leetcode 3489. Zero Array Transformation IV

  • Leetcode 3489. Zero Array Transformation IV
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3489. Zero Array Transformation IV

1. 解题思路

这一题我的思路就是一个二分法,即给定一个值 k k k,考察前 k k k个query能否将原始数组全变为0。显然,如果原始数组能完全变为0,则必然存在一个临界值 k ′ k' k,使得对任意 k ≥ k ′ k \geq k' kk,数组都能变为 0 0 0,反之对任意 k < k ′ k < k' k<k,数组都不能变为 0 0 0。此时,通过二分法,我们就能找到 k k k的临界值 k ′ k' k

此时,问题就变成了给出一个值 k k k,如何判断每一个元素是否可以变为 0 0 0,考虑到数组最多也就10个元素,因此,我们可以依次考察每一个位置上的可变动范围,然后分别考察每一个元素是否可以变为 0 0 0即可。

即,我们最终的问题也就变成了,给定一个数组,能否从中选取若干个元素,使之加和恰好为一个确定的目标值 x x x。这就是一个典型的动态规划的问题了。

综上,命题完全求解。

2. 代码实现

给出python代码实现如下:

class Solution:
    def minZeroArray(self, nums: List[int], queries: List[List[int]]) -> int:
        if all(x == 0 for x in nums):
            return 0
        
        def is_possible(k):
            candidates = [[] for _ in nums]
            for l, r, v in queries[:k]:
                for i in range(l, r+1):
                    candidates[i].append(v)
            candidates = [sorted(x, reverse=True) for x in candidates]
            
            @lru_cache(None)
            def _is_possible(i, idx, tgt):
                if tgt == 0:
                    return True
                if i >= len(candidates[idx]):
                    return False
                if candidates[idx][i] == tgt:
                    return True
                elif candidates[idx][i] > tgt:
                    return _is_possible(i+1, idx, tgt)
                else:
                    return _is_possible(i+1, idx, tgt-candidates[idx][i]) or _is_possible(i+1, idx, tgt)
                
            return all(_is_possible(0, idx, num) for idx, num in enumerate(nums))
        
        l, r = 0, len(queries)
        if not is_possible(r):
            return -1
        while r-l>1:
            m = (l+r)//2
            if is_possible(m):
                r = m
            else:
                l = m
        return r

提交代码评测得到:耗时106ms,占用内存26.7MB。

相关文章:

  • MinGW下编译nginx源码
  • SpringBoot实现接口重试方案
  • mac电脑如何将wps接入deepseek (傻瓜式教学)
  • 阿里云CEN创建实验
  • RTSP/Onvif安防视频EasyNVR平台 vs.多协议接入视频汇聚EasyCVR平台:设备分组的区别
  • Qt画动态环形或饼状图接口程序
  • langchain整合数据库
  • 深入理解 Java 线程池
  • CSS 盒模型
  • 宇数科技激光雷达L2
  • 设计模式-单一职责
  • 最新!Ubuntu Docker 安装教程
  • 11 Collection集合、Map集合:分类、功能、遍历、底层原理,Stream流:获取、中间方法、终结方法 (黑马Java视频笔记)
  • 电信大带宽服务器的应用场景都有哪些?
  • 21.多态
  • 【JDK17】开源应用服务器大比对
  • redis zset基本介绍以及底层实现
  • Unity音乐内存优化
  • jmeter吞吐量控制器-Throughput Controller
  • 计算机四级 - 数据库原理 - 第9章「数据库应用及安全性」
  • 失智老人有两个儿子却欠费住养老院两年多,法检合力指定监护人
  • 西安集中整治监督教育领域不正之风和腐败问题,举报方式公布
  • 上海国际电影节将于6月3日公布排片表,6月5日中午开票
  • 减负举措如何助力基层干部轻装上阵?记者一线调查
  • IPO周报|本周2只新股申购,比亚迪、上汽“小伙伴”来了
  • 宫崎骏的折返点