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

Qwen模型 LeetCode 2584. 分割数组使乘积互质 Java实现

哇这道2584题超有意思的让我来给你讲讲我的解法思路~ 这道题就像是在玩化学实验我们要把数组分成两部分让它们的化学成分质因数完全不重叠题目要求找到最小的分割点使得左边所有数的乘积和右边所有数的乘积互质。互质就是说它们没有共同的质因数就像两个陌生人一样没有任何交集。javaimport java.util.*;public class Solution {public int findValidSplit(int[] nums) {int n nums.length;// 特判只有一个元素的情况if (n 1) return -1;// 记录每个质因数最后出现的位置MapInteger, Integer lastOccurrence new HashMap();// 预处理找出每个位置的所有质因数并记录它们最后出现的位置for (int i 0; i n; i) {int num nums[i];SetInteger primeFactors getPrimeFactors(num);for (int factor : primeFactors) {lastOccurrence.put(factor, i);}}// 贪心扫描维护当前需要覆盖的最远位置int maxReach 0;for (int i 0; i n - 1; i) {int num nums[i];SetInteger primeFactors getPrimeFactors(num);// 更新当前需要覆盖的最远位置for (int factor : primeFactors) {maxReach Math.max(maxReach, lastOccurrence.get(factor));}// 如果当前位置已经可以作为分割点if (i maxReach) {return i;}}return -1;}// 获取一个数的所有质因数去重private SetInteger getPrimeFactors(int num) {SetInteger factors new HashSet();// 处理因子2if (num % 2 0) {factors.add(2);while (num % 2 0) {num / 2;}}// 处理奇数因子for (int i 3; i * i num; i 2) {if (num % i 0) {factors.add(i);while (num % i 0) {num / i;}}}// 如果剩下的数大于1说明它本身就是一个质数if (num 1) {factors.add(num);}return factors;}}嘿嘿这个解法的核心思想特别巧妙我把它叫做质因数覆盖区间法**想象一下**每个质因数就像一条彩带从它第一次出现的位置一直延伸到最后一次出现的位置。我们要找的分割点就是所有彩带都结束之后的位置**算法步骤**1. **预处理阶段**遍历整个数组找出每个质因数最后出现的位置2. **贪心扫描**从左到右走维护一个最远需要覆盖的位置3. **判断分割点**当我们的当前位置超过了所有已遇到质因数的最远位置时就可以分割啦举个例子[2, 3, 6, 5]- 质因数2出现在位置0和2最后在位置2- 质因数3出现在位置1和2最后在位置2- 质因数5出现在位置3最后在位置3当我们走到位置2时发现质因数2和3的最远位置都是2但这时候我们还没处理完因为位置2的6还包含了这些因子。只有当我们确保所有相关的质因数都不会再出现在右边时才能安全分割这个算法的时间复杂度大概是 O(n√m)其中m是数组中最大的数空间复杂度是O(k)k是不同质因数的个数。你觉得这个思路怎么样要不要我再给你讲讲其他类似的区间覆盖问题这类题目在面试中还挺常见的呢
http://www.zskr.cn/news/1362894.html

相关文章:

  • Qwen模型 LeetCode 2577. 在网格图中访问一个格子的最少时间 Java实现
  • 智谱清言 LeetCode 2573. 找出对应 LCP 矩阵的字符串 Python3实现
  • 2026企业数字化转型:从规则脚本到实在Agent智能体进化全解析
  • 信息安全工程师-移动应用安全核心知识体系与备考指南
  • 信息安全工程师-工控安全产品体系与行业实践全解析
  • WOFOST模型参数太多看不懂?这份保姆级解读指南帮你从入门到精通
  • 量子计算在蛋白质折叠问题中的应用与BF-DCQO算法解析
  • ThinkPad装Win10总报错?别急着找驱动,先试试换个USB口(亲测E540有效)
  • Windows软件清单采集:注册表+WMI+PackageManager三源协同实战
  • CVE-2024-38819漏洞复现:Tomcat 10.1.22 JNDI注入完整验证指南
  • 差分隐私矩阵机制与FFT优化:保护多轮迭代计算的高效方法
  • C#实现自动化创建Word可填写表单
  • 告别卡顿!用Sunshine在Linux上搭建低延迟远程桌面,平板秒变移动工作站
  • 2026Q2成都鑫达嘉丰保温技术服务对接实操全指南:成都鑫达嘉丰保温材料有限公司联系/防水基层板厂家/防水背衬板批发/选择指南 - 优质品牌商家
  • Win10离线安装.net 3.5终极指南:巧用DISM命令,告别0x800f081f错误
  • UE5.3与VS2022编译配置深度优化指南
  • CSS Web安全字体
  • 告别TeamViewer!在Ubuntu 22.04上安装向日葵远程控制的保姆级教程(附依赖问题解决)
  • 机器人视觉与贝叶斯优化实现粉末冲调自动化
  • 语音AI家庭部署实战:从实验室到真实环境的预评估与工程化指南
  • Windows下跑深度学习模型,遇到‘页面文件太小’报错?别急着加内存条,先试试这个D盘虚拟内存设置(保姆级图文)
  • 8051开发中PDATA内存优化使用指南
  • 基于k-可加Choquet积分的SHAP值高效近似与特征交互分析
  • 2026基酒择优技术分享:浓香型酒体设计/白酒代理加盟品牌/白酒体验馆加盟/白酒批发厂家/缺陷酒修复/苦味酒处理/选择指南 - 优质品牌商家
  • 不用pip install -e也能搞定Vision Mamba训练:我的CIFAR-100快速测试与whl文件安装指南
  • 在WSL2的Ubuntu 22.04上,用Intel OneAPI 2024完整配置VASP 6.3.2计算环境
  • Mac新手必看:绕过‘无法验证开发者’弹窗的3种安全方法(含终端命令详解)
  • 机器学习预测钙钛矿薄膜应变弛豫:从稀疏数据挖掘三维弹性耦合机制
  • Unity弓箭抛物线弹道实现:手动物理积分与实时预览
  • EasyMLServe:一键部署机器学习模型,自动生成REST API与GUI界面