前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「冲击leetcode青铜5」妙用数组fill处理每日温度

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

作者头像
程序员白彬
发布于 2020-07-10 08:39:09
发布于 2020-07-10 08:39:09
32600
代码可运行
举报
文章被收录于专栏:前端全栈分享前端全栈分享
运行总次数:0
代码可运行

原创@大前端技术沙龙

在老家过完粽子节,回到工作地又可以一脸开(无)心(奈)地刷leetcode了。今天的题目是每日温度,给定一个温度数组,求解的目标是算出某一天需要等待几天才能超过该天的温度。

每日温度

请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0来代替。

例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]

提示:气温列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。

两层循环判断

整体思路是,利用两层for循环,判断每个温度之后是否有更高的温度。要注意,第一层for循环到最后一个元素时,是不会进入第二层for循环的。此时直接通过push方法把0塞入数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @param {number[]} T
 * @return {number[]}
 */
var dailyTemperatures = function(T) {
    var result = [];
    for(var i = 0, len = T.length; i < len; i++) {
        if (i == len - 1) {
            result.push(0);
        } else {
            var currValue = T[i];
            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;
};

执行结果是:

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

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

考虑边界

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var dailyTemperatures = function(T) {
    var result = [];
    for(var i = 0, len = T.length; i < len; 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,所以也不需要判断是否需要进第二层循环。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的性能挺好的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

如果给数组初始化1000个值为0的元素呢?不得不说,数据量越大,fill性能越好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// fill计时: 0.01220703125ms
// push计时: 0.136962890625ms

再看了看fill的兼容性,我只想说,在LeetCode中别怕,给我用最新的特性,IE不兼容的fill都可以用上。

最后再把第一名的代码放上去提交一遍,尼玛,啪啪打脸。

同样的代码人家执行耗时132ms,我这里提交就是执行耗时872ms。我只想问,LeetCode执行用时是怎么算出来的?

不过有一说一,第一名的解法确实性能更好,写法也很优雅,值得学习。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bin不懂二进制 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
内容,内容资产,以及内容即服务
内容是指在媒体、平台或者其他载体上所呈现的信息、文章、图片、视频、音频等形式的表达。内容可以是有关某个特定主题或领域的知识、观点、故事、娱乐等,通过文字、图像、声音等方式传达给用户或观众。在互联网时代,内容的重要性越来越突出,各种网站、应用和社交媒体平台都以提供优质内容为目标,吸引用户关注和参与。
KATSU
2023/09/09
4520
内容,内容资产,以及内容即服务
突破传统营销:SEO、社交媒体和聊天机器人的联动策略
搜索引擎优化(SEO)、社交媒体和聊天机器人之间的界限越来越模糊,这为您创造了与受众建立联系和推动参与的新机会。如果您对聊天机器人技术有些疑虑,那就让我们来看看这些令人兴奋的新可能性能否让您安心!
SEO-juper
2023/11/20
2810
ChatGPT 大师
随着技术的不断发展,营销人员可用的工具和策略也必须适应变化和创新。在这个创新的海洋中,有一个
ApacheCN_飞龙
2024/05/24
1500
利用SEO优化策略:实现网站流量与排名双提升
在全球化的商业环境中,在进行海外市场的搜索引擎优化(SEO)时,常常面临语言、文化和搜索习惯的差异。代理IP 作为一种辅助工具,能够有效解决这些挑战,提升SEO效果。以下是深入探讨代理IP在SEO优化中应用的内容:
镰ge_麦穗
2025/03/28
2220
利用SEO优化策略:实现网站流量与排名双提升
SMART让您的内容和SEO更智能
你多学一样本事,就少说一句求人的话!只有自己足够强大,才不会被别人践踏。 SMART目标管理原则,如何用SMART原则来与SEO相关联?如何让SMART原则应用到网站内容中去?今天主要来聊聊SMART
黄伟SEO
2018/05/17
8580
广告狗们,真不是吓唬你!再甩你10个可能抢走狗粮的经典案例!
小编发现,自从昨天发布了广告狗们注意了!未来夺走你工作的可能不是客户爸爸---是他!引起了一片哗然!于是小编一发不可收拾,瞒着老板又收集了十个早期经典案例准备继续虐狗!
iCDO互联网数据官
2018/07/27
6450
广告狗们,真不是吓唬你!再甩你10个可能抢走狗粮的经典案例!
ChatGPT 百万富翁手册
人工智能(AI)的急剧出现引发了组织工作方式和个人与技术互动方式的一波变革。这些变化是由 AI 的崛起带来的。人工智能中最令人印象深刻的例子之一就是被称为 ChatGPT 的模型,它由 OpenAI 开发。这个模型能够进行自然语言处理。由于它能够阅读和生成与人类极为相似的语言,它有潜力使商业的许多方面,尤其是利润丰厚的“赚钱”领域,成为一个极其令人困惑和难以预测的复杂领域。
ApacheCN_飞龙
2024/05/24
930
2015年网络营销的七大趋势
福布斯中文网(微信公号: forbeschinaonline)授权转载 数字营销领域的转变和进步正在加速,对旁观者来说,要跟上恐怕有些困难。因此,就在这2014年临近年末之际,不妨让我们来回顾一下今年出现的营销趋势,并且展望一下2015年可能出现的趋势。 1. 面向移动终端的优化将会变得比以往任何时候都要重要 面向移动终端应用进行优化,在2014年已经成了企业一项至关重要的任务,但是在2015年,这种移动策略将更进一步,不再仅限于为企业设立响应式网站或开发移动应用,还将注重面向移动终端优化的内容和社交媒体
大数据文摘
2018/05/23
7680
7.ChatGPT与SEO - 优化内容策略【7/10】
在当今的数字化时代,搜索引擎优化(SEO)已成为数字营销中不可或缺的一部分。它不仅帮助企业提高在线可见性,还直接影响着网站的流量、品牌知名度和最终的销售转化。SEO通过优化网站内容和结构,使其在搜索引擎结果页(SERP)上获得更高的排名,从而吸引更多的潜在客户。
正在走向自律
2024/12/18
1610
7.ChatGPT与SEO - 优化内容策略【7/10】
10个助燃商业增长的市场营销战略
引言:什么是最优营销策略?最重要的是建立真挚的顾客关系,那么就可以通过以下10种策略在线营销任何业务。
iCDO互联网数据官
2018/10/25
5770
独立开发者工具 • 半月刊 • 第 008 期
Indie Tools - 专注于分享独立开发:出海、精选、最新、最实用的工具和资源
沉浸式趣谈
2025/04/16
760
独立开发者工具 • 半月刊 • 第 008 期
看看国外SEO专家是怎么定义SEO的?
再近的距离,你不踏出第一步,永远到达不了目的地,再远的路程,只要一步一个脚印,总能看到最美的风景。
黄伟SEO
2019/03/06
1.2K0
整合营销的4项必备技能
“ 整合营销作为一门艺术和科学如今仍在不断发展,要求企业营销团队不断补充新鲜血液,培养新的技能。在今天乃至未来,应重点关注以下技能,提升营销能力,确保整合营销取得切实效果。”
产品言语
2022/06/02
7560
【对话ChatGPT】如何提高网站的访问量?
上周给博客开通的 Google adsense,收益比微信公众号好一些,收益跟访问量成正比,于是我问了 ChatGPT 这个问题。
狂奔滴小马
2023/03/16
1.1K0
ChatGPT 之现金流
在当今快节奏和不断发展的世界中,财务稳定和独立变得越来越重要。零工经济的兴起导致了兼职的激增,即人们在正常工作之外从事的兼职活动,以赚取额外收入。
ApacheCN_飞龙
2024/05/24
940
ChatGPT 之现金流
ChatGPT 初学者指南
如果您一直关注新闻和趋势,您可能已经在某个地方读到或听到过,Sam Altman 的生成式人工智能平台 ChatGPT 已经将人工智能推向了一个新的高度 - 许多人已经开始尝试使用这个令人惊叹的工具来赚钱。
ApacheCN_飞龙
2024/05/24
1550
ChatGPT 初学者指南
seo搜索引擎排名优化
使用关键词研究工具确定相关性高且搜索量适中的关键词,并将这些关键词自然地融入标题、段落和标签中,但避免过度堆砌,保持内容流畅自然。
用户10637139
2024/04/27
2050
为什么小型网站,更适合做SEO?
其实SEO优化是涉及到了数百个完美的规划以及执行的操作,只要当你看见要完成的事情的列表时,大多数小型网站的管理者放弃了投资SEO的想法。正确的SEO将提高您的在线可见度,帮助您建立更好的在线形象,在您的网站上产生更多流量,并帮助您开始朝着更大的目标迈进。
蝙蝠侠IT
2021/06/29
6340
为什么小型网站,更适合做SEO?
一些关于网站推广问题合集。
提供高质量的内容:提供高质量、原创、有用的内容是最重要的。这可以吸引更多的用户访问,并增加用户留存时间,提高用户体验。同时,高质量的内容也会被其他网站引用和分享,这将有助于增加外部链接,提高网站的权重。
很酷的站长
2023/02/16
4840
Next.js 中的 SEO
Next.js 是一个用于构建服务器呈现的 React 应用程序的框架,使用像 Next.js 这样的框架的好处之一是它可以很容易地针对搜索引擎优化您的应用程序。
海拥
2023/02/27
4.6K0
相关推荐
内容,内容资产,以及内容即服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档