第二课 训练准备和复杂度分析

1、训练环境设置、编码技巧和 Code Style

⼯欲善其事,必先利其器

1)电脑设置

VSCode; Java: IntelliJ; Python: Pycharm
LeetCode plugin (VSCode & IntelliJ)
https://vscodethemes.com/

2)Code Style

默认空格习惯

3)LeetCode

leetcode-cn.com 和 题解 国内版看题解
leetcode.com 和 Discuss board 去掉-cn看国际版前三个

4)指法和⼩操作

• home, end(⾏头、⾏尾)
• Word 单词、选单词、选整⾏
• IDE 的⾃动补全
• Top tips for

5)⾃顶向下的编程⽅式

https://markhneedham.com/blog/2008/09/15/clean-code-book-review/
https://leetcode-cn.com/problems/valid-palindrome/


![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzA2NjI2LzE1ODc3ODM1MTgyODYtYmQ0MDU3YTAtZmNhZi00YTk3LWEzOGYtMWExZDIyZjhkOTM0LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=343&margin=[object Object]&name=image.png&originHeight=685&originWidth=924&size=405251&status=done&style=none&width=462)
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzA2NjI2LzE1ODc3ODM0ODE0NTQtM2UxYjQyNjctNDQwMi00ZTBiLWJmM2UtNGViZmYzYTk3NWFiLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=321&margin=[object Object]&name=image.png&originHeight=642&originWidth=1561&size=362250&status=done&style=none&width=780.5)


2、时间复杂度、空间复杂度

Big O notation

O(1): Constant Complexity 常数复杂度
O(log n): Logarithmic Complexity 对数复杂度
O(n): Linear Complexity 线性时间复杂度
O(n^2): N square Complexity 平⽅
O(n^3): N square Complexity ⽴⽅
O(2^n): Exponential Growth 指数
O(n!): Factorial 阶乘
注意:只看最⾼复杂度的运算


Big O notation
O(1)
int n = 1000;
System.out.println("Hey - your input is: " + n);
O(1)
int n = 1000;
System.out.println("Hey - your input is: " + n);
System.out.println("Hmm… I’m doing more stuff with: " + n);
System.out.println("And more: " + n);

O(N)
for (int i = 1; i <= n; i++) {
System.out.println("Hey - I’m busy looking at: " + i);

}

O(N^2)
for (int i = 1; i <= n; i++) {

for (int j = 1; j <=n; j++) {

System.out.println("Hey - I’m busy looking at: " + i + " and " + j);

}

}

O(log(n))
for (int i = 1; i < n; i = i * 2) {

System.out.println("Hey - I’m busy looking at: " + i);

}

O(k^n)
int fib(int n) {

if (n <= 2) return n;

return fib(n - 1) + fib(n - 2);

}

时间复杂度曲线

![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzA2NjI2LzE1ODc3OTUzNDMzOTMtODdhOWM5ODItZDQwNS00ZjAzLTgzNTYtMzA5MTI4MjA5Yjk5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=352&margin=[object Object]&name=image.png&originHeight=703&originWidth=1065&size=154053&status=done&style=none&width=532.5)

实例

• ⽅法⼀:从1到n的循环累加

y = 0

for i = 1 to n:

y += i

• ⽅法⼆:求和公式 sum = n(n+1)/2

y = n * (n + 1) / 2

递归

Fib: 0, 1, 1, 2, 3, 5, 8, 13, 21, …


F(n)= F(n-1) + F(n-2)
面试(直接递归)
int fib(int n){
if (n <= 2) return n;
return fib(n-1) + fib(n-2);
}

![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzA2NjI2LzE1ODc3OTU2MDk5ODgtOTE2NzNkMTMtZTk3My00ZDQyLTlmOWYtODI0MmY5YWRiMTc5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=387&margin=[object Object]&name=image.png&originHeight=774&originWidth=1529&size=109106&status=done&style=none&width=764.5)

Master Theorem

![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzA2NjI2LzE1ODc3OTU2MjgwOTktMmM2OTZmYjMtZjg1Ni00NDQ1LWE5ZjQtNTNmNDBiMTQxYmE5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=147&margin=[object Object]&name=image.png&originHeight=294&originWidth=1194&size=153488&status=done&style=none&width=597)

思考题

⼆叉树遍历 - 前序、中序、后序:时间复杂度是多少?

图的遍历:时间复杂度是多少?

搜索算法:DFS、BFS 时间复杂度是多少?

⼆分查找:时间复杂度是多少?

⼆叉树遍历 - 前序、中序、后序:O(N)

图的遍历:O(N)

搜索算法:DFS、BFS - O(N)

⼆分查找:O(logN)

小结

• 常⽤⼯具配置

• 基本功和编程指法

• 常⻅的时间、空间复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值