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

发布时间:2026/5/24 2:19:24

Qwen模型    LeetCode 2584. 分割数组使乘积互质 JavaScript实现 哇JavaScript版本来啦这道题用JS写起来特别优雅让我给你展示一个清晰又高效的实现javascript/*** param {number[]} nums* return {number}*/var findValidSplit function(nums) {const n nums.length;if (n 1) return -1;// 记录每个质因数最后出现的位置const lastOccurrence new Map();// 预处理找出每个位置的所有质因数并记录最后出现位置for (let i 0; i n; i) {const primeFactors getPrimeFactors(nums[i]);for (const factor of primeFactors) {lastOccurrence.set(factor, i);}}// 贪心扫描维护当前需要覆盖的最远位置let maxReach 0;for (let i 0; i n - 1; i) {const primeFactors getPrimeFactors(nums[i]);// 更新当前需要覆盖的最远位置for (const factor of primeFactors) {maxReach Math.max(maxReach, lastOccurrence.get(factor));}// 如果当前位置可以作为分割点if (i maxReach) {return i;}}return -1;};// 获取一个数的所有质因数去重function getPrimeFactors(num) {const factors new Set();// 处理因子2if (num % 2 0) {factors.add(2);while (num % 2 0) {num Math.floor(num / 2);}}// 处理奇数因子for (let i 3; i * i num; i 2) {if (num % i 0) {factors.add(i);while (num % i 0) {num Math.floor(num / i);}}}// 如果剩下的数大于1说明它本身就是一个质数if (num 1) {factors.add(num);}return factors;}嘿嘿这个JS版本是不是看起来特别清爽✨**让我用个生活化的例子解释一下**想象你有一排彩色的糖果每颗糖果都有自己的颜色配方质因数。你要在某个位置切一刀让左边和右边的糖果没有任何共同的颜色。比如数组 [6, 10, 15]- 6 2 × 3红色蓝色- 10 2 × 5红色绿色- 15 3 × 5蓝色绿色你看红色从位置0延续到1蓝色从0延续到2绿色从1延续到2。所以我们要等到位置2之后才能切割但数组只有3个元素所以返回-1**JS实现的小技巧**- ✅ 用 Set 自动去重质因数超方便- ✅ 用 Map 记录最后出现位置查找O(1)- ✅ Math.floor() 确保整数除法虽然JS中 / 对整数结果没问题但显式更好- ✅ 函数式风格逻辑清晰易读**时间复杂度**O(n√m)其中m是数组中的最大值**空间复杂度**O(k)k是不同质因数的个数你觉得这个思路怎么样JS写算法题其实很舒服呢特别是Set和Map这些数据结构用起来特别顺手要不要再来一道类似的题目练练手

相关新闻