你写代码,会关注时间复杂度吗?
虽然面试的时候总是被问到这个问题,但你写代码的时候,真的会想到这个问题吗?时间复杂度,说的当然不是你写的代码执行用了多长时间,而是代码执行语句的次数。
目录
每行代码都需要注意
计算方法
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 的设…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...