news 2026/6/16 6:01:56

DeepSeek LeetCode 3266. K 次乘运算后的最终数组 II Java实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 3266. K 次乘运算后的最终数组 II Java实现

这道题是 LeetCode 3266,和 3264 的区别在于 k 的范围扩大到 1e9,直接堆模拟会超时,需要用数学规律优化。

核心思路

当数组中 所有元素都大于当前最大值 时,后续操作会进入稳定循环:每次操作选择最小的元素,乘完后它变成最大,n 次操作正好轮完一轮。

因此分两阶段处理:

1. 模拟阶段:用最小堆模拟,直到堆顶元素 × multiplier > 当前最大值或 k 用完
2. 批量阶段:剩余操作均匀分配到每个元素,用快速幂计算

Java 实现

```java
class Solution {
private static final int MOD = 1_000_000_007;

public int[] getFinalState(int[] nums, int k, int multiplier) {
int n = nums.length;

// multiplier = 1 时数组不变
if (multiplier == 1) return nums;

// 最小堆:[值, 索引]
PriorityQueue<long[]> pq = new PriorityQueue<>((a, b) ->
a[0] != b[0] ? Long.compare(a[0], b[0]) : Long.compare(a[1], b[1])
);

int maxVal = 0;
for (int i = 0; i < n; i++) {
maxVal = Math.max(maxVal, nums[i]);
pq.offer(new long[]{nums[i], i});
}

// 阶段1:模拟直到堆顶乘 multiplier 后超过 maxVal
while (k > 0 && pq.peek()[0] < maxVal) {
long[] cur = pq.poll();
cur[0] *= multiplier;
pq.offer(cur);
k--;
}

// 阶段2:剩余操作均匀分配
// 此时堆中元素已有序,取出排序
long[][] arr = new long[n][2];
for (int i = 0; i < n; i++) {
arr[i] = pq.poll();
}
// 按值排序(值相同时按索引)
Arrays.sort(arr, (a, b) -> a[0] != b[0] ? Long.compare(a[0], b[0]) : Long.compare(a[1], b[1]));

int base = k / n; // 每个元素至少乘 multiplier^base
int extra = k % n; // 前 extra 个元素多乘一次

int[] result = new int[n];
for (int i = 0; i < n; i++) {
long val = arr[i][0] % MOD;
int idx = (int) arr[i][1];
int exp = base + (i < extra ? 1 : 0);
result[idx] = (int) (val * fastPow(multiplier, exp) % MOD);
}

return result;
}

// 快速幂
private long fastPow(long x, int n) {
long res = 1;
while (n > 0) {
if ((n & 1) == 1) {
res = res * x % MOD;
}
x = x * x % MOD;
n >>= 1;
}
return res;
}
}
```

复杂度分析

· 时间复杂度:O(n log n)
· 堆化 O(n)
· 模拟阶段最多 O(n) 次堆操作
· 排序 O(n log n)
· 空间复杂度:O(n)

示例验证

```java
// 示例
int[] nums = {2, 1, 3, 5, 6};
int k = 5, multiplier = 2;
// 输出: [8, 4, 6, 5, 6]
```

这个解法利用了数学规律将 O(k) 的模拟优化为 O(n log n),可以高效处理 k 高达 1e9 的情况。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 6:00:52

手把手用dd制作Clonezilla启动盘:Ubuntu系统克隆实战指南

1. 为什么今天还要亲手做一张Clonezilla启动盘&#xff1f;——一个系统运维老手的真实观察Clonezilla这个词&#xff0c;现在听起来有点像老式收音机里传出来的杂音&#xff0c;安静、怀旧&#xff0c;甚至带点“过时”的错觉。但上周我帮一家社区图书馆重装23台老旧的Ubuntu终…

作者头像 李华
网站建设 2026/6/16 5:58:53

增量型思维:从核心理念到敏捷实践的系统化指南

1. 项目概述&#xff1a;从“增量”思维到系统化实践“增量型”这个词&#xff0c;乍一听可能有点技术范儿&#xff0c;但它背后的理念其实渗透在我们工作和生活的方方面面。简单来说&#xff0c;它描述的是一种“小步快跑、持续叠加”的做事方式。无论是软件开发里的“增量开发…

作者头像 李华
网站建设 2026/6/16 5:50:59

MPC8533E处理器启动基石:复位、时钟与配置信号深度解析

1. MPC8533E处理器启动基石&#xff1a;复位、时钟与配置信号总览在嵌入式系统开发&#xff0c;尤其是基于PowerPC架构的通信处理器设计中&#xff0c;系统能否从“一片混沌”的加电状态&#xff0c;稳定、可靠地进入预设的工作模式&#xff0c;其基石就在于复位、时钟与配置信…

作者头像 李华
网站建设 2026/6/16 5:50:05

Llama 3本地部署实战:从8B量化到中文微调的全链路指南

1. 这不是又一个“开源口号”&#xff0c;而是真正能跑在你笔记本上的大模型分水岭Llama 3一发布&#xff0c;我立刻把刚配好的那台i9-14900K64GB内存RTX 4090的开发机推到了工作台最前面——不是为了跑个demo截图发朋友圈&#xff0c;是真要把它塞进我们正在做的本地知识库系统…

作者头像 李华
网站建设 2026/6/16 5:49:31

UV Squares:5分钟掌握Blender最智能的UV网格转换神器

UV Squares&#xff1a;5分钟掌握Blender最智能的UV网格转换神器 【免费下载链接】UvSquares Blender addon for reshaping UV quad selection into a grid. 项目地址: https://gitcode.com/gh_mirrors/uv/UvSquares 还在为Blender中不规则的UV布局而烦恼吗&#xff1f;…

作者头像 李华
网站建设 2026/6/16 5:46:58

AI技术主权实战指南:模块化、边缘化与合成数据三重路径

1. 项目概述&#xff1a;这不是一场战争&#xff0c;而是一场“规则重写”的集体实验“硅谷AI‘围剿’与‘反围剿’”——这八个字最近频繁出现在科技媒体头条、投资人内部简报&#xff0c;甚至高校AI伦理课的讨论提纲里。它不是指某次具体并购、某项法案投票或某家公司的公关战…

作者头像 李华