你有 k
个背包。给你一个下标从 0 开始的整数数组 weights
,其中 weights[i]
是第 i
个珠子的重量。同时给你整数 k
。
请你按照如下规则将所有的珠子放进 k
个背包。
- 没有背包是空的。
- 如果第
i
个珠子和第j
个珠子在同一个背包里,那么下标在i
到j
之间的所有珠子都必须在这同一个背包中。 - 如果一个背包有下标从
i
到j
的所有珠子,那么这个背包的价格是weights[i] + weights[j]
。
一个珠子分配方案的 分数 是所有 k
个背包的价格之和。
请你返回所有分配方案中,最大分数 与 最小分数 的 差值 为多少。
建模:n个数,有n-1个缝,选k-1个缝,分割数组
两头的数肯定要加上的所以最大方案和最小方案都包含,差值就忽略两头的数了,就看缝的选择。
每选择一个缝,意味着和要加上缝两边的数字,创建以恶搞缝隙数组a,a[i]=weights[i]+weights[i+1]
。
最大方案就是去最大的k-1个,最小方案就是取最小的k-1个,然后相减。
k==1或者k==n时只有一种方案,相减结果是0,当然也是被通用逻辑兼容的,也可以不做特殊判断
/** * @param {number[]} weights * @param {number} k * @return {number} */ var putMarbles = function(weights, k) { if(k==1||k==weights.length) return 0; let a=new Array(weights.length-1); for(let i=0;i<a.length;i++) a[i]=weights[i]+weights[i+1]; a.sort((a,b)=>a-b); let sum1=0,sum2=0; for(let i=0;i<k-1;i++){ sum1+=a[i]; sum2+=a[a.length-1-i]; } return sum2-sum1; };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】