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

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 的情况。

http://www.rkmt.cn/news/1533386.html

相关文章:

  • jina-embedding-l-en-v1性能优化指南:NPU加速与批量处理技巧
  • 3分钟掌握Illustrator批量替换:设计师必备的效率革命工具
  • DLSS Swapper完整指南:免费开源工具轻松管理游戏DLSS版本,提升显卡性能表现
  • NXP HSCMP高速比较器:七大工作模式、寄存器配置与电机控制实战
  • 2026年AI模型天选时刻:闭源旗舰VS开源顶流,645倍价格差如何选最适合你的“它“?
  • MSC8156 AMC硬件架构深度解析:以太网、复位与电源配置实战
  • Table Agent:自然语言驱动的无代码数据分析工作流
  • 一文读懂Agent、harness、Loop等概念
  • ImageGlass:解锁90+图像格式的终极免费浏览体验
  • Claude Code环境搭建:Agent Runtime+Superpowers+MCP三件套集成指南
  • 猫抓:浏览器资源嗅探神器如何免费快速获取网页视频音频资源
  • AI技术主权实战指南:模块化、边缘化与合成数据三重路径
  • AI研习社(十二)
  • 比特币价格预测:CNN-LSTM混合模型实战指南
  • Win11Debloat:Windows系统优化终极指南 - 一键清理让你的电脑飞起来
  • Koa性能基准测试:与其他Node.js框架的对比分析
  • 2026年市场观察:高评价单向拉伸塑料格栅品牌推荐与选购指南 - 优质品牌商家
  • BERTopic与计算扎根理论在教育数据挖掘中的应用
  • Windows内存优化终极解决方案:Mem Reduct完全指南
  • 智谱二次上市背后的现金流真相:大模型烧钱周期与商业闭环
  • UART接收器原理与MSC8251配置:从信号采样到错误处理全解析
  • 2026年口碑公认的早熟李子新品种树苗推荐,果农真实反馈与种植经验盘点 - 优质品牌商家
  • 【课程设计/毕业设计】基于 SpringBoot 的农产品种植流通溯源系统设计 农业产品全生命周期溯源管理系统研发【附源码、数据库、万字文档】
  • 防爆认证ex ia Ⅱc T3详解:本质安全型设备选型与应用指南
  • 2026年绿色防控市场深度观察:性诱剂诱芯企业竞争力与行业趋势分析 - 优质品牌商家
  • PlatformIO嵌入式开发环境优化:从原理到实战解决工程创建慢
  • QR分解:机器学习中稳定求解最小二乘的数值基石
  • 频率计数计 FPGA 设计 Verilog Vivado ISE/Vivado
  • RTX 3090多卡AI训练为何失效?硬件架构与CUDA通信瓶颈深度解析
  • 机器学习模型堆叠实战:从原理到代码实现