采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
在n=2^k+j的情况需要的数组空间 老师给的是4n 这样会不会给得太过于足够了 这个空间。
其实应该 为 2^(k+2)空间吧,也就是在n中找到不大于n但是满足2的最大k次方,找到这个k值,然后基于这个k乘以4。
赞!可以参考这个问答下的讨论:)
https://coding.imooc.com/learn/questiondetail/58660.html
加油!
所以说 其实是故意再多浪费空间,目的是为了不反推这个k值么
是犯懒啊!哈哈:)开4n的空间是算法竞赛中实现线段树的惯例。从没遇到过因为4n的空间比2^(k+2)大所以导致内存溢出(MLE)的情况。但是如果你的实际业务场景内存空间特别吃紧,可以改进代码,开辟2^(k+2)的空间,甚至放弃使用数组存储的线段树(因为即使这个空间足够紧,也有很多空间浪费!),转而使用基于节点链式链接的线段树:)
了解了,谢谢老师
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.3k 16
1.4k 17
1.3k 14
1.2k 14