第一周:时间复杂度该怎么看?

news/2024/10/2 10:44:06

文章小结:

1.算法时间复杂度是什么

 官方定义:算法在编写成可执行程序后,运行时所需要的资源,资源包括时间和内存。
 解读:可执行程序运行所需要时间的一个量化指标。例如O(1),常量级。

2. 常见的时间复杂度

  • O(1) :常量级
  • O(n):线性
  • O(logn):对数
  • O(nlogn)
  • O(n^2):平方
  • O(k^n):指数级
  • O(n!):阶乘级别

3.如何判断代码的算法时间复杂度

首先我们假设执行一行代码需要的时间为1, 判断代码时间复杂度就是是看算法执行次数和n的关系。

例如:下面代码的时间复杂度为O(1)

String dogName = "小黄";
Systerm.out.print("this is a dog " + dogName);

 

例2: 下面代码片段中,代码执行次数为n,代码时间复杂度为O(n)。

for (int i=0; i<n; i++) {Systerm.out.print("get num " + i);
}

 

4.如何快速判断代码时间负载度。

想要快速判断代码片段时间负载度有两个方法,记忆和公式。这里我们仅讨论记忆,记住代表性的模板就可以快速判断时间复杂度

// 时间复杂度:O(1)
int a = 1;
int b = 2;
Systerm.out.print("sum is" + (a+b));// 时间复杂度:O(n)
for (int i=0; i<n; i++) {Systerm.out.print("get num " + i);
}// 时间复杂度:O(n^2)
for (int j=0; j<n; i++) {for (int i=0; i<n; i++) {Systerm.out.print("get num " + (i+ j));}
}
// 时间复杂度:O(logn)
for (int i=0; i<n; i=i*2) {Systerm.out.print("get num" + i);
}// 时间复杂度:O(2^n)
int fib(int n) {if (n<=2) return n; return fib(n-1) + fib(n-2);
}

O(1)、O(n)、O(n^2) 相对比较容易理解,这里不在赘述。

分析下O(logn)是怎么得到的。
2^0 = 1
2^1 = 2
2^2 = 4
.....
2^k = n;  所以需要执行k次。k=log2n,系数可以忽略所以时间负载度为 O(logn)。

 

通过图例解释下O(k^n)指数级算法负载度

 

 

5.延展内容。如何刷题(LeetCode)

区分业余和职业的最大区别在于是否有专项联系。比如乒乓球运动员,专项发球练习,接球练习等等等。刷法也是一样,不能只做一遍,针对弱项要多练。

  •  做题方法
    • 多看几遍题,或者和面试官去恩人,确保自己的理解是正确的。
    • 想所有可能的解题方法,同时比较时间和空间复杂度。
    • 做题
    • test case
  • 切题方法
    • 第一遍
      • 5分钟。读题+思考。
      • 直接看答案。注意多解法,对比。
      • 背诵+默写好的答案。
    • 第二遍
      • 马上默写背诵的答案-->提交LeetCode (寻找反馈)
      • 多种解法对比体会。
    • 第三遍
      • 24小时后重新做一遍
      • 针对不同解法的不熟练的要专项练习
    • 第四遍
      • 一周后反复练习相同的题目
    • 第五遍
      • 面试前反复练习

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

提升效率必备VSCode运行快捷键全攻略

哈喽,大家好,我是木头左!快速编译与执行 在开发过程中,频繁地编译和执行代码是必不可少的。而在VSCode中,通过简单的键盘操作即可完成这些操作,无需鼠标点击或多余的步骤。 Ctrl + Shift + B or Cmd + Shift + B 这个快捷键用于编译当前打开的文件。按下它,VSCode会使用…

一行Python代码可以做什么,超出你想象

哈喽,大家好,我是木头左!揭秘编程语言的灵活性 在编程的世界里,简洁就是力量。Python以其优雅和简洁而著称,让开发者能够用更少的代码做更多的事。但这并不意味着功能上的妥协——Python的强大之处在于它允许在一行代码中执行多个语句,这不仅能提高的编码效率,还能使代码…

嗨翻-Python-第三版-早期发布--全-

嗨翻 Python 第三版(早期发布)(全)原文:annas-archive.org/md5/417e7d9e18255015d2c5d146fdf36e20 译者:飞龙 协议:CC BY-NC-SA 4.0序言 安装最新的 Python 3 你在这里所做的取决于你正在运行的平台,假定是其中之一的 Windows、macOS 或 Linux。 好消息是所有三个平台都…

【杂记】配置文件

properties配置文件 application.properties是springboot项目默认的配置文件,所以springboot程序在启动时会默认读取application.properties配置文件,而我们可以使用一个现成的注解:@Value,获取配置文件中的数据。@Value 注解通常用于外部配置的属性注入,具体用法为: @Va…

wnmp安装配置记录(重装系统重置后)

一、windows10 二、nginx安装与配置 nginx news开源网站下载稳定版本1.nginx下载完成解压,即安装成功 2.进入安装目录,双击nginx.exe,启动nginx服务器 3.浏览器中打开http://localhost,出现nginx欢迎页面即为成功 三、安装配置php 1、进入PHP官网下载最新稳定版本,windows…

MongoDB 学习

MongoDB 简介MongoDB是一个文档数据库,但文档并不是一般理解的pdf, word文档,而是JSON对象,因为文档来自于“JSON Document”(JSON文档),所以MongoDB是存JSON对象的数据库,比如{"greeting”: "hello world"}。说起文档,想到的应该是JSON对象,所以文档中的…

maven学习笔记(一)

maven学习笔记(一) 1. 什么是Maven 1.1. Maven的概念 Maven 是自动化构建工具。 Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。 Maven 是目前最流行的自动化构建工具,对于生产环…