This commit is contained in:
youngyangyang04
2020-12-18 14:56:38 +08:00
parent 81e64736c7
commit 3862b11519
2 changed files with 5 additions and 10 deletions

View File

@ -214,6 +214,7 @@
* [贪心算法:加油站](https://mp.weixin.qq.com/s/aDbiNuEZIhy6YKgQXvKELw)
* [贪心算法:分发糖果](https://mp.weixin.qq.com/s/8MwlgFfvaNYmjGwjuMlETQ)
* [贪心算法:柠檬水找零](https://mp.weixin.qq.com/s/0kT4P-hzY7H6Ae0kjQqnZg)
* [贪心算法:根据身高重建队列](https://mp.weixin.qq.com/s/-2TgZVdOwS-DvtbjjDEbfw)
* 动态规划

View File

@ -123,20 +123,14 @@ public:
}
};
```
* 时间复杂度O(nlogn + n^3)
* 时间复杂度O(nlogn + n^2)
* 空间复杂度O(n)
大家会发现这个n^3 是怎么来的?
但使用vector是非常费时的C++中vector可以理解是一个动态数组底层是普通数组实现的如果插入元素大于预先普通数组大小vector底部会有一个扩容的操作即申请两倍于原先普通数组的大小然后把数据拷贝到另一个更大的数组上。
其实数组的插入操作复杂度是O(n^2)寻找插入元素位置O(1)插入元素O(n^2),因为插入元素后面的元素要整体向后移
所以使用vector动态数组来insert是费时的插入再拷贝的话单纯一个插入的操作就是O(n^2)了甚至可能拷贝好几次就不止O(n^2)了
如果对数组的增删时间复杂度不清楚的话,可以做做这道题目[数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA)数组中插入元素和删除元素都是O(n^2)的复杂度
我们就是要模拟一个插入队列的行为,所以不应该使用数组,而是要使用链表!
链表的插入操作复杂度是O(n)寻找插入元素位置O(n)插入元素O(1)。
可以看出使用链表的插入效率要比普通数组高出一个数量级!
对于本题不用vector的话如果有多少人就申请多大的固定数组来模拟插入操作也可以这样就不会有扩充数组的情况但是就要真的手动模拟插入的操作了比较麻烦
改成链表之后C++代码如下: