你写代码,会关注时间复杂度吗?
虽然面试的时候总是被问到这个问题,但你写代码的时候,真的会想到这个问题吗?时间复杂度,说的当然不是你写的代码执行用了多长时间,而是代码执行语句的次数。
目录
每行代码都需要注意
计算方法
1 例如常量增长
2 嵌套循环
优化时间复杂度
每行代码都需要注意
试想一下,你用古老的方法写了一大段,然后还避免不了出个bug,然后其他同事做同样的功能,用了一个新方法,就写了一行代码,代码审查的时候,大家会怎么看你呢。
不过一般写代码的时候,倒是还不涉及太多的时间复杂度,因为你那一大段顶死也就是十几行或者二十几行,计算机执行这而是来行代码又能多复杂呢,时间复杂度,更多的时候,会用于涉及到算法的时候。
至于说到算法,可能就不是这几行,几十行的执行了,一个循环下来,稍有不慎,几百行几千行了就是。虽然这么说,但我们仍然要尽量避免写冗余的代码,毕竟几十行几十行下来,日旷持久,也是一种消耗。你可以在一行代码上下分别打印时间,做个记录,看看一段时间下来,你的用户们的设备执行这一行JS代码,会消耗多久的时间。
计算方法
那么我们该如何看自己代码或者写的一些算法的时间复杂度呢?通常计算时间复杂度,都是选取执行过程中,相对增长最高的项,或者理解为最坏的情况(或者是最耗时的情况)。
1 例如常量增长
如果有一个算法是计算常量的,哪怕执行上万次,复杂度也是O(1)
let n = 0;
for (let i=0;i<10000;i++) {n++
}
2 嵌套循环
例如我们的二维嵌套循环实现中,时间复杂度就是看得内部循环的语句决定的。例如下面的算法语句,看的主要是就是内部的循环次数,以此为基础,再算上外部的循环次数,看下面这个O(n*m)
for (i = 0; i < m; i++){for (j = 0; j < n; j++) {...// console.log(i);...}
}
如果外层也是n不是m的话,那就是O(n^2)啦。
优化时间复杂度
优化JavaScript代码以降低时间复杂度是一个重要的目标,特别是当处理大量数据或执行频繁的操作时。以下是一些常见的技巧和策略,可以帮助你降低JavaScript代码的时间复杂度:
-
减少循环嵌套: 循环嵌套是导致时间复杂度增加的主要因素之一。尽量避免不必要的嵌套循环,并尝试将算法重构为更简洁的形式。
-
避免重复计算: 如果某些计算结果在算法执行过程中多次使用,可以考虑将其缓存起来,避免重复计算,从而提高性能。
-
优化递归算法: 如果你使用递归算法,确保它的递归深度不会过深,以避免栈溢出。在可能的情况下,尝试将递归算法转换为迭代算法,因为迭代算法通常更有效率。
-
避免不必要的对象创建: 避免在循环中创建大量临时对象,特别是在频繁执行的代码段中。
-
利用缓存: 当需要频繁地访问某些计算结果时,可以考虑使用缓存来存储这些结果,以避免重复计算。
相关文章:
你写代码,会关注时间复杂度吗?
虽然面试的时候总是被问到这个问题,但你写代码的时候,真的会想到这个问题吗?时间复杂度,说的当然不是你写的代码执行用了多长时间,而是代码执行语句的次数。 目录 每行代码都需要注意 计算方法 1 例如常量增长 2 …...
【连连国际注册/登录安全分析报告】
连连国际注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨…...
linux进阶高级配置,你需要知道的有哪些(10)-远程访问
1、ssh协议的功能 为客户机提供安全的shell环境(字符界面),用于远程管理 2、openssh的服务说明 服务名:sshd 重启服务:systemctl restart sshd 主配置文件:/etc/ssh/sshd/_config 端口号:tcp 2…...
不显示 表格 style=“display: none;“ 这个默认是不显示的
不显示 表格 style“display: none;” 这个默认是不显示的 取消就可以或者 $(‘#modifyStatusBtn’).show(); <div id"userInfoContainer" style"display: none;"></div>...
Bittensor怎么挖?手把手教你,使用bitget钱包
4月 Binance 上新 TheBittensorHub (TAO), 这个项目究竟做了什么可以令其在上大舞台前就已经在所有通证中排名前 30? 本文将深度解析。 该项目既不直接贡献数据,也不直接贡献算力。 而是通过区块链网络和激励机制,来对不同的算法进行调度和…...
领略Java内部类的“内部”
内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中内部类的两个特点: (1) 在外部…...
PHP 提取数组中的特定的值
需求: 前端展示: (1)之前的页面: (2)修改后的页面: 之前接口返回的数据 : 解决办法:提取tags 中的 ’约 的数组 添加到一个新的数组中去 1:一开…...
SpringBoot、JAVA中excel、rtf、doc转PDF
话不多说,直接上干货 // 官方文档的要求 无需理会public static boolean getLicense() {boolean result false;try {String s "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Wo…...
生信技能45 - 基于docker容器运行生信软件
1. 获取docker镜像 以运行xhmm CNV分析软件为例。 # 搜索仓库镜像 sudo docker search xhmm# 拉取镜像 sudo docker pull ksarathbabu/xhmm_v1.0# 启动镜像,非后台 sudo docker run -it ksarathbabu/xhmm_v1.0 /bin/bash # -i: 交互式操作。 # -t: 终端。 # ksarathbabu/xhmm…...
算法训练营第63天|LeetCode 84.柱状图中最大的矩形
完结!撒花! LeetCode 84.柱状图中最大的矩形 题目链接: LeetCode 84.柱状图中最大的矩形 代码: class Solution { public:int largestRectangleArea(vector<int>& heights) {heights.insert(heights.begin(),0);he…...
python跟C++选哪个?
选择使用Python还是C取决于你的具体需求和项目背景。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。 在通信工程行业…...
速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术
在现代汽车工业中,车辆的电子控制单元(ECU)之间的通信至关重要。这种通信大多通过控制器局域网络(CAN)总线实现,它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…...
数据分析的数据模型
数据分析的数据模型 前言一、优化模型1.1线性优化模型1.1.1线性优化模型定义1.1.2线性优化模型求解算法1. 1.2.1图解法1. 1.2.2. 单纯形法 1.1.3 线性优化模型的应用 1.2非线性优化模型1.2.1非线性优化模型定义1.2.2非线性优化划模型求解方法1. 2.2.1有约束非线性模型算法1.2.2…...
SQL注入-通达OA SQL注入漏洞【CVE-2023-4166】原理及检测思路分析
1、漏洞描述 通达OA中发现一个漏洞,并被列为严重漏洞。该漏洞影响文件general/system/seal_manage/dianju/delete_log.php的未知代码。对参数 DELETE_STR 的操作会导致 sql 注入。 2、影响范围 通达OA版本11.10之前 3、复现环境 FOFA搜索:app"TDX…...
数据结构(七)复杂度渐进表示
数据结构(七)复杂度渐进表示 要点:复杂度相加取较大值,嵌套取二者乘积 思考:为什么只需要知道复杂度的趋势就可以了? 01 复杂度的渐进表示法 Ω复杂度渐进表示法区分复杂度T(n)的上界(o&…...
3d如何同时贴两个图在模型上?---模大狮模型网
在3D设计中,为模型贴上纹理或图案是常见的操作,可以使模型更加逼真和生动。然而,有时候我们需要在同一个模型上同时贴上两个不同的图案,这可能会对初学者构成一定的挑战。在本文中,我们将分享一些简单而有效的方法&…...
【全开源】Java同城预约月嫂服务上门服务本地服务源码APP+小程序+公众号+H 5
智能匹配与推荐:源码运用先进的算法和定位技术,根据用户的需求和地理位置,智能匹配并推荐附近的合适月嫂。这种匹配不仅基于地理位置,还考虑了月嫂的技能、经验、评价等因素,确保服务的质量和可靠性。 在线预约与支付…...
汇聚荣科技:拼多多开店时后期押金可以退吗?
在电商领域,拼多多以其独特的团购模式迅速崛起,吸引了众多商家入驻。对于这些商家而言,了解平台的各项费用政策尤为重要,其中押金的退还问题是大家关注的焦点之一。那么,拼多多开店时后期押金可以退吗?答案是肯定的。…...
【机器学习与实现】K近邻算法
目录 一、KNN算法简介(一)KNN算法包括三个步骤(二)超参数K的影响 二、距离度量三、邻近点的搜索算法四、KNN算法的特点五、KNN常用的参数及其说明六、分类算法的性能度量(一)混淆矩阵及相关概念(…...
【Python探索之旅】初识Python
目录 发展史: 环境安装: 入门案例: 变量类型 标准数据类型 数字类型: 字符串: 全篇总结: 前言: Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设…...
钉钉机器人消息解析器:基于JSON Path与模板的自动化数据提取方案
1. 项目概述:一个钉钉消息解析器的诞生最近在做一个内部自动化工具时,遇到了一个挺有意思的需求:需要把钉钉机器人推送过来的消息,从原始的、结构复杂的JSON格式里,精准地“抠”出我们关心的业务数据。比如,…...
在 Simulink 中搭建 DSOGI 模块和双 PI 环
目录 📐 第一步:理解对称分量法与正负序分离原理 🛠️ 第二步:Simulink 建模核心步骤 📊 第三步:仿真结果与波形分析 在 Simulink 中搭建 DSOGI 模块和双 PI 环 在上一节我们实现了理想电网下的无功补偿…...
如何用JavaScript解放双手:AutoJs6让Android自动化变得简单有趣
如何用JavaScript解放双手:AutoJs6让Android自动化变得简单有趣 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 你是否厌倦了每天在手机上重复点击相同的按钮&#…...
UE5 产品三维交互展示 创意实现
1. UE5产品三维交互展示的核心价值 想象一下,你正在向客户展示一款全新的无人机产品。传统的二维图片和视频已经无法满足需求,客户希望全方位了解产品细节,甚至能亲手"拆解"查看内部构造。这正是UE5三维交互展示的用武之地。 UE5…...
STM32与ADS1256的SPI通信实战:从寄存器配置到串口数据可视化
1. 硬件准备与电路连接 第一次接触ADS1256这块24位ADC芯片时,我被它的精度吓到了——理论上能分辨出0.000000119V的电压变化!不过要让STM32和它正常对话,硬件连接是第一个门槛。我用的STM32F103C8T6最小系统板,和ADS1256模块之间…...
开发者专属提示词库:提升AI协作效率的实战指南
1. 项目概述:一个为开发者量身定制的提示词宝库如果你是一名开发者,无论是前端、后端、运维还是算法工程师,我相信你都或多或少地接触过像 ChatGPT 这类大型语言模型。它们能写代码、解 Bug、解释概念,甚至帮你设计架构。但很多时…...
高考解析几何“秒杀”技巧:用极点极线快速搞定椭圆定点定值难题
高考解析几何“秒杀”技巧:用极点极线快速搞定椭圆定点定值难题 解析几何作为高考数学的压轴题型,常常让考生望而生畏。面对复杂的计算和抽象的条件,如何在有限时间内快速找到突破口?极点极线理论作为高等几何中的重要工具&#x…...
ARMv8-AArch64 异常处理实战:从寄存器解析到调试技巧
1. ARMv8-AArch64异常处理入门指南 第一次接触ARMv8架构的异常处理时,我被那一堆寄存器搞得头晕眼花。ELR、ESR、FAR...这些缩写看起来就像天书一样。但经过几个实际项目的磨练后,我发现只要掌握几个关键点,异常处理其实并没有想象中那么难。…...
暗黑3鼠标宏终极指南:D3KeyHelper 5步配置法快速上手
暗黑3鼠标宏终极指南:D3KeyHelper 5步配置法快速上手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为暗黑破坏神3玩…...
为开源项目OpenClaw配置Taotoken作为后端模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为开源项目OpenClaw配置Taotoken作为后端模型供应商 OpenClaw是一个功能强大的开源智能体(Agent)框架&…...
