优化代码战的Javascript函数

优化代码战的Javascript函数,javascript,algorithm,optimization,Javascript,Algorithm,Optimization,当我在编辑器中运行它时,我有一个解决问题的方法(所有成功通过代码战的测试用例),但当我尝试提交时,我得到以下错误: 进程被终止。完成此操作需要12000ms以上的时间 为什么我的代码超时了 我们的服务器配置为只允许您的代码执行一定的时间。在极少数情况下,服务器可能会承担太多的工作,根本无法足够有效地运行代码。大多数情况下,虽然这个问题是由低效的算法引起的。如果多次看到此错误,则应尝试进一步优化代码 该函数的目标是从1数到n,并计算出其中有多少个数字带有“9”。如果一个数字中有多个“9”,例如99

当我在编辑器中运行它时,我有一个解决问题的方法(所有成功通过代码战的测试用例),但当我尝试提交时,我得到以下错误:

进程被终止。完成此操作需要12000ms以上的时间

为什么我的代码超时了

我们的服务器配置为只允许您的代码执行一定的时间。在极少数情况下,服务器可能会承担太多的工作,根本无法足够有效地运行代码。大多数情况下,虽然这个问题是由低效的算法引起的。如果多次看到此错误,则应尝试进一步优化代码

该函数的目标是从1数到n,并计算出其中有多少个数字带有“9”。如果一个数字中有多个“9”,例如99,则该munber有两个9 这是我现在拥有的代码:

function number9(n){
  let numArray = [];
  let split = [];
  for (let i = 0; i <= n; i++) {
    const split = i.toString().split("");
    if (split.includes("9")) {
      const joinArray = split.join("");
      numArray.push(...joinArray.split(""));
    }
  }
  let finalArray = [];
  for (let element of numArray) {
    if (element === "9") {
      finalArray.push(element);
    }
  }

  return finalArray.length;
}
功能编号9(n){
设numArray=[];
让split=[];

对于(设i=0;i上一个测试1000000000是一个大数字:100亿。即使是一个空的
for
循环,也会运行太长时间。你需要想出一个更聪明的算法。这不是一个优化问题,尽管你的代码可能要简单得多。这个问题的关键是找到一种计算9个数字的方法它不需要检查范围内的每个数字。也就是说,优化提示:1.不要
拆分
,而是使用
charAt
对字符进行迭代,以避免不必要的内存分配。2.将包含9的所有数字放入一个数组没有意义,只需保留一个总数的计数器。@Thomas是的,但这仍然不会通过t他测试。@Pointy也可以看我的第一句话:)最后一个测试1000000000是一个大数字:100亿。即使是一个空的
for
循环到该数字也会运行太长时间。你需要想出一个更聪明的算法。这不是一个优化问题,尽管你的代码可能会简单得多。这个问题的关键是找到一种方法来计算9位数而不需要ha要检查范围内的每一个数字。也就是说,优化提示:1.不要使用
split
,而是使用
charAt
对字符进行迭代,以避免不必要的内存分配。2.将包含9的所有数字放入一个数组没有意义,只需保留一个总数的计数器。@Thomas是的,但这仍然无法通过测试。@Poin(参见我的第一条评论:)