【原型模式】
问题
需要克隆一个对象
原型模式
创建对象的克隆(例如:python中的copy)
Demo
背景 && 需求
克隆对象
代码
1 | import copy |
输出
info1: 4540133696, name: 4538957168, books: 4540422336
info2: 4538883840, name: 4538957168, books: 4540493376
需要克隆一个对象
创建对象的克隆(例如:python中的copy)
克隆对象
1 | import copy |
info1: 4540133696, name: 4538957168, books: 4540422336
info2: 4538883840, name: 4538957168, books: 4540493376
按层遍历树即可
1 | class Solution: |
深搜,生成括号
1 | class Solution: |
1、创建的对象复杂,需要由多个部分组成,且这些这些部分需要按照特定顺序完成
2、希望构造与表示解耦
可以创建一个由多个部分(这些部分按特定顺序完成)组成的对象
披萨订购应用程序
支持订购2种披萨:Margarita披萨、CreamyBacon披萨
制作披萨需4个步骤:1、准备面团;2、加调味汁;3、加配料;4、烤
1 | # !/usr/bin/python3 |
prepare dough for margarita
done with dough
add sauce to margarita
done with sauce
add topping to margarita
done with topping
baking margarita…
margarita ready
Enjoy margarita!
prepare dough for creamy bacon
done with dough
add sauce to creamy bacon
done with sauce
add topping to creamy bacon
done with topping
baking creamy bacon…
creamy bacon ready
Enjoy creamy bacon!
1、将会议时间数组排序:
按start从小到大排序,当start相同时,按end从小到大排序
2、根据会议时间顺序依次安排房间:
记录每个房间释放的时间,若即将安排的会议start早于最小的释放时间,则需要新房间,否则更新房间的释放时间
贪心关键点:将 “即将安排的会议start” 与 “最小的释放时间” 做比较,尽可能避免冲突
O(N*logN) N:会议时间数组长度
详细分析:
1、python sorted时间复杂度:O(N*logN)
关于sorted时间复杂度,可参考:https://www.cnblogs.com/clement-jiao/p/9243066.html
2、最坏情况下N个会议均冲突,此时heappop[0]时间复杂度:O(1),heappush时间复杂度:O(logN),故总的时间复杂度为O(N*logN)
关于heapq操作的时间复杂度,可参考:https://www.coder.work/article/97172
O(N) N:会议时间数组长度
详细分析
1、最坏情况下N个会议均冲突,heap_queue需要存储N个数据
1 | class Solution: |
“二分查找”
注意考虑 3 种情况:
1、nums[l] < nums[mid]
2、nums[l] > nums[mid]
3、nums[l] == nums[mid]
1 | class Solution: |
预先开出max(key)的空间,确保每个key都有一个单独的索引
超大数组会占用的空间太大,可以将输入的数据分桶,每个桶的数据动态增长
推荐使用质数取余进行分桶
只要输入的数据足够随机,是否用质数取模无所谓的;
但是实际输入的数据一般是有规律的,如果使用合数取余,当合数和数据存在非1的约数,
那数据只会被分桶到约数的倍数,违背了尽量使各个桶之间的元素数近似相等的原则。
参考:
https://www.zhihu.com/question/20806796/answer/21359160
https://blog.csdn.net/xp178171640/article/details/102929544
1 | class MyHashMap: |
1 | class MyHashMap: |
深搜,即可生成字母的数字组合
利用python3内置函数,生成笛卡尔积
1 | class Solution: |
1 | class Solution: |
模拟 “整数” 转换为 “英文”
注意:100 转换结果为 One Hundred
1 | class Solution: |
按层遍历二叉树即可
1 | # Definition for a binary tree node. |