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

Leetcode 3266. Final Array State After K Multiplication Operations II

  • Leetcode 3266. Final Array State After K Multiplication Operations II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3266. Final Array State After K Multiplication Operations II

1. 解题思路

这一题是题目3264. Final Array State After K Multiplication Operations I的进阶版本。

他的基础逻辑还是按照题目3264,即直接维护一个有序数列然后逐次操作一下即可:

class Solution:def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:q = [(x, i) for i, x in enumerate(nums)]heapq.heapify(q)for _ in range(k):x, i = heapq.heappop(q)heapq.heappush(q, (x*multiplier, i))ans = deepcopy(nums)for x, i in q:ans[i] = xreturn ans

但是对于进阶版的题目3266,kmultiplier都可能会很大,因此我们不但无法直接使用for循环循环k,也无法一直保持乘法,必须在中间进行持续同余的操作,避免中间结果过大。

但是可以预想的是,显然经过了若干次操作之后,我们会得到一个序列,满足最小的元素进行一次乘法操作之后得到的新元素必然大于最大的元素,此时这些元素的相对大小也就被保留下来了,用上述有序数列来说的话就是每次操作都会是第一个操作乘完之后变成了最后一个元素。

此时,剩余的k次乘法操作就会被均匀分配到所有的n个数上面,此时我们就可以快速的得到每一个元素的最终值为 x i × m ⌊ k n ⌋ x_i \times m^{\lfloor\frac{k}{n}\rfloor} xi×mnk了。(注意一下余数的问题,即头部哪些元素可能会多进行若干次操作)。

而剩下的我们只需要通过python内置的pow函数即可快速实现了。

2. 代码实现

给出最终的python代码实现如下:

MOD = 10**9+7class Solution:def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:if multiplier == 1:return numsn = len(nums)q = [(x, i) for i, x in enumerate(nums)]_max = max(nums)heapq.heapify(q)while k > 0:x, i = heapq.heappop(q)y = x * multiplierheapq.heappush(q, (y, i))k -= 1if y > _max:breakm, r = k // n, k % nq = sorted(q)ans = deepcopy(nums)for i, (x, idx) in enumerate(q):if i < r:ans[idx] = (x * pow(multiplier, m+1, MOD)) % MODelse:ans[idx] = (x * pow(multiplier, m, MOD)) % MODreturn ans

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Pytorch 模型保存与加载
  • java中拷贝文件数据到U盘
  • Excel的使用总结1
  • 开始尝试从0写一个项目--后端(四)
  • 图形几何算法 -- 判断两条线段是否相交
  • 线性层与MLP层
  • Git 多人协作
  • Linux --- 文件系统
  • 后来你发现 根密钥 的存储并不安全,于是你认识了PUF。
  • 怎么解决小程序的异步请求问题
  • WordPress简约响应式个人博客Kratos主题
  • Redis中事务与乐观锁
  • 继承与构造函数与析构函数
  • 基于Java+SpringBoot+Vue的师生共评的作业管理系统设计与实现
  • 白酒与旅行日记:探索世界,品味美酒
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • extract-text-webpack-plugin用法
  • git 常用命令
  • Github访问慢解决办法
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript的使用你知道几种?(上)
  • Just for fun——迅速写完快速排序
  • npx命令介绍
  • Vue 2.3、2.4 知识点小结
  • 半理解系列--Promise的进化史
  • 前端之Sass/Scss实战笔记
  • 如何在 Tornado 中实现 Middleware
  • 算法-插入排序
  • 微服务核心架构梳理
  • 一天一个设计模式之JS实现——适配器模式
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​低代码平台的核心价值与优势
  • (C++17) std算法之执行策略 execution
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (十三)MipMap
  • (算法)Travel Information Center
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .describe() python_Python-Win32com-Excel
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @SpringBootApplication 注解
  • [Android]常见的数据传递方式
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [c++] 自写 MyString 类
  • [C++]:for循环for(int num : nums)
  • [C语言]——分支和循环(4)
  • [Everyday Mathematics]20150130
  • [FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)
  • [Flutter] extends、implements、mixin和 abstract、extension的使用介绍说明
  • [java][SSM]整合Mybatis3、Spring4 和 SpringMVC4 的步骤
  • [JAVASE] 异常 与 SE阶段知识点补充