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

Leetcode 3542. Minimum Operations to Convert All Elements to Zero

  • Leetcode 3542. Minimum Operations to Convert All Elements to Zero
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3542. Minimum Operations to Convert All Elements to Zero

1. 解题思路

这一题的处理方法其实还是挺好想明白的,其实就是从小到大依次处理各个元素,对于每一个元素,将其前后连续的所有不小于该元素的节点连成一个连续子序列,然后对其进行统一操作,这样就能最优化地将所有元素均变为0。

但是这里的问题就在于说如何快速找出这连续的子序列,如果最暴力的走将会是一个 O ( N 2 ) O(N^2) O(N2)的算法复杂度的实现了。

这里,我们采用的方法是使用DSU的方法,然后处理方式上从大到小依次处理元素,考察每一个元素时,我们只需要考察其前后的元素是否有被处理过,如果处理过的情况下,其所处的连续簇当中是否有过相同大小的元素,如果有,就可以将其合并,如果没有,那么则必须额外增加一次操作来处理当前的元素。

由此,我们即可得到最优的操作数。

2. 代码实现

给出python代码实现如下:

class DSU:def __init__(self, arr):self.arr = arrself.root = [i for i in range(len(arr))]def find(self, k):if self.root[k] != k:self.root[k] = self.find(self.root[k])return self.root[k]def find_elem(self, k):return self.arr[self.find(k)]def union(self, a, b):x = self.find(a)y = self.find(b)if x != y:if self.arr[x] <= self.arr[y]:self.root[y] = xelse:self.root[x] = yreturnclass Solution:def minOperations(self, nums: List[int]) -> int:n = len(nums)dsu = DSU(nums)seen = set()nums = sorted([(x, i) for i, x in enumerate(nums)], reverse=True)ans = 0for x, i in nums:if x == 0:breakneed_op = Trueseen.add(i)if i-1 >= 0 and i-1 in seen:if dsu.find_elem(i-1) <= x:need_op = Falsedsu.union(i-1, i)if i+1 < n and i+1 in seen:if dsu.find_elem(i+1) <= x:need_op = Falsedsu.union(i+1, i)if need_op:ans += 1return ans

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

http://www.xdnf.cn/news/426979.html

相关文章:

  • APISQL免费版安装教程(视频)
  • java刷题基础知识
  • 【Folium】使用离线地图
  • 我的MCP相关配置记录
  • Cursor 编辑器 的 高级使用技巧与创意玩法
  • JavaScript异步编程 Async/Await 使用详解:从原理到最佳实践
  • 基于RT-Thread的STM32F4开发第三讲——DAC
  • 基于TI AM6442+FPGA解决方案,支持6网口,4路CAN,8个串口
  • 《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》
  • Vue 3.5 :新特性全解析与开发实践指南
  • MQTT 协议详解:物联网通信的利器
  • 【Unity】WebGL开发问题汇总
  • 专栏项目框架介绍
  • 【Redis】谈谈Redis的设计
  • 网安学途—流量分析 attack.pcap
  • 【TS入门笔记8---了解JSX】
  • G1在GC的时候会占用内存吗?占用的是分配的内存还是分配外的内存
  • JS Map使用方法
  • Linux上的rm和srm 命令
  • Femap许可网络配置
  • MRI、DX、CT 医学影像常用术语详解:概念与应用
  • 在Babylon.js中实现完美截图的艺术:包含Canvas和HTML覆盖层
  • 【完全平方数包含相同数】2021-11-30
  • LeetCode 3335.字符串转换后的长度 I:I先递推
  • 运用数组和矩阵对数据进行存取和运算——NumPy模块 之六
  • 浅谈 Redis 数据类型
  • 【PmHub后端篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现
  • 【Canda】常用命令+虚拟环境创建到选择
  • aardio —— 虚表 —— 同一单元格内用不同的字体
  • maven中relativepath标签的含义及使用方法