You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何固定首数组顺序,仅重排第二个数组以实现乘积总和最大化

实现方案

核心逻辑

基于排序不等式原理:两个序列同序相乘求和的结果最大,因此保持C数组位置不变的前提下,需要将C数组中数值越大的位置匹配越大的M数组元素。

实现步骤

  • 为C数组每个元素绑定原始索引,避免排序后丢失元素的原有位置信息
  • 将绑定索引的C数组按元素数值从大到小排序
  • 将M数组复制后按数值从大到小排序,避免修改原M数组
  • 新建结果数组,遍历排序后的C和M,将排序后的M元素依次放入对应C元素的原始索引位置
  • 最终返回重排后的M数组

代码实现

function getMaxSumMultiplierArr(C, M) {
  // 绑定C元素的原始索引
  const indexedC = C.map((value, index) => ({ value, index }));
  // C按数值降序排序
  indexedC.sort((a, b) => b.value - a.value);
  // M复制后按数值降序排序
  const sortedM = [...M].sort((a, b) => b - a);
  const rearrangedM = new Array(M.length);
  // 对应位置赋值
  for (let i = 0; i < indexedC.length; i++) {
    rearrangedM[indexedC[i].index] = sortedM[i];
  }
  return rearrangedM;
}

测试验证

// 示例1测试
const C1 = [10, 5, 6, 7];
const M1 = [8, 9, 2, 5];
console.log(getMaxSumMultiplierArr(C1, M1)); // 输出:[9, 2, 5, 8]

// 示例2测试
const C2 = [5, 3, 7, 1];
const M2 = [1, 4, 3, 9];
console.log(getMaxSumMultiplierArr(C2, M2)); // 输出:[4, 3, 9, 1]

内容的提问来源于stack exchange,提问作者Diego Villafañe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:27:02