「冲击leetcode青铜5」妙用数组fill处理每日温度

inner: for (var j = i + 1, len = T.length; j < len; j++) {

if (T[j] > currValue) {

waitDay = j - i;

break inner;

}

}

result.push(waitDay)

}

}

return result;

};

执行结果是:

内存占用45.8M,超过100%用户?

执行时间924ms,竟然只超过了20.19%的用户。

考虑边界


考虑温度的边界,如果当前温度是100,那肯定就不用进第二层循环了。

var dailyTemperatures = function(T) {

var result = [];

for(var i = 0, len = T.length; i < len; 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】  i++) {

var currValue = T[i];

if (currValue === 100) {

result.push(0);

} else if (i == len - 1) {

result.push(0);

} else {

var waitDay = 0;

inner: for (var j = i + 1, len = T.length; j < len; j++) {

if (T[j] > currValue) {

waitDay = j - i;

break inner;

}

}

result.push(waitDay)

}

}

return result;

};

new Array & fill


提交解法后,我看了一下第一名的解法,还是学到了一点东西。

主要有两个地方不太一样:

  • 一个是使用new Array预先声明好数组空间,在大数组时性能表现更佳;

  • 第二个是使用了Array.prototype.fill预填充0,所以也不需要判断是否需要进第二层循环。

var dailyTemperatures = function(T) {

const res = new Array(T.length).fill(0);

for (let i = 0; i < T.length; i++) {

for (let j = i + 1; j < T.length; j++) {

if (T[j] > T[i]) {

res[i] = j - i;

break;

}

}

}

return res;

};

特意对比了一下fillpush的执行时间,原来fill的性能挺好的。

console.time(‘fill计时’);

var a = new Array(100).fill(0);

console.timeEnd(‘fill计时’);

// fill计时: 0.009033203125ms

console.time(‘push计时’);

a.push(0);

a.push(0);

a.push(0);

// 此处省略97行a.push(0);特意没有用for循环,毕竟循环也是要开销的。

console.timeEnd(‘push计时’);

// push计时: 0.02001953125ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值