你写代码,会关注时间复杂度吗?
虽然面试的时候总是被问到这个问题,但你写代码的时候,真的会想到这个问题吗?时间复杂度,说的当然不是你写的代码执行用了多长时间,而是代码执行语句的次数。
目录
每行代码都需要注意
计算方法
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 的设…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...