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