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

超大数值区间下检查大数组元素全相等的最优实现方法

问题核心

别在那优化数组判等方法了,没用。你超时的根因是思路错了:逐个数遍历万亿级区间,哪怕你每个数的判断逻辑快到只花1纳秒,跑完1万亿次也要一千多秒,怎么抠判等的细节都不可能过。
各位数字全相同的整数总共就没几个:1位的是1-9共9个,2位的是11、22...99共9个,3位是111到999共9个,一直到12位的111...111(12个1)到999...999(12个9),满打满算12*9=108个。你根本不需要遍历区间里的所有数,直接把这108个数全生成出来,数一下有多少个落在[A,B]区间里就行,计算量直接从万亿次降到一百次,不可能超时。

实现代码
const uniformInteger = (A, B) => {
  let count = 0;
  // 遍历1-9作为重复的数字
  for (let d = 1; d <= 9; d++) {
    let current = 0;
    // 逐位拼接,最多生成12位(匹配万亿级上限)
    for (let len = 1; len <= 12; len++) {
      current = current * 10 + d;
      if (current >= A && current <= B) count++;
      if (current > B) break; // 超过区间上限直接停,不用生成更长的
    }
  }
  return count;
};

// 小范围测试:1-300 结果应为20(9个1位数、9个两位数、111/222两个三位数)
console.log(uniformInteger(1, 300));
// 万亿级测试 瞬间返回结果108
console.log(uniformInteger(1, 999999999999));
额外说明

你之前写的反转数组操作完全是多余的,不管是用every、Set还是自定义循环判等,只要还是走逐数遍历的思路,面对大区间就一定会超时。这种计数类问题先找符合条件的数的规律,直接生成目标数永远比暴力遍历效率高。


内容的提问来源于stack exchange,提问作者GThree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:57:25