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

贪心算法求解最大薪资问题:提交代码未通过测试用例求错因

问题分析

你的代码核心问题出在排序规则设计错误,补末尾字符对齐位数的逻辑无法覆盖所有测试场景,会出现判断失误。

错误场景举例

输入数组[21, 211]:

  • 按照你的逻辑,最大位数是3,21补末尾的1得到211,和211数值相等,代码会按照原有数组顺序排列两者
  • 实际正确拼接结果应为21211(21拼接211),而非21121(211拼接21),你的规则无法区分这种场景。

另外代码还有语法隐患:finalArr没有声明直接赋值,会隐式创建全局变量,严格模式下会直接报错。

修正方案

正确的排序规则不需要对齐位数,直接比较两个数字转字符串后拼接的结果即可:对于字符串a和b,如果a + b的字典序大于b + a,则a排在b前面。

修正后代码

function MaxSallary(nums) {
  // 全部转成字符串方便拼接比较
  const strArr = nums.map(num => num.toString());
  // 自定义排序规则
  strArr.sort((a, b) => {
    const ab = a + b;
    const ba = b + a;
    // 降序排列,更大的拼接结果对应的字符串放前面
    return ba.localeCompare(ab);
  });
  // 处理全0的特殊情况:比如输入[0,0],输出应为0而非00
  return strArr[0] === '0' ? '0' : strArr.join('');
}

边界场景说明

修正后的代码额外处理了全0的特殊输入,符合绝大多数判题系统的输出要求,同时所有原有测试用例均可正常通过。


内容的提问来源于stack exchange,提问作者Cihat Şaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:36:04