今天做了一道算法题要求是不占用额外空间,也就是不占用额外内存,据我的浅薄理解,就是不能创建任何新的变量?
然后我看了一下答案,人家是创建了一个新的变量的,这让我很困惑。
于是,我找了一下网上的说法,但很少有人清楚地回答。
有人说这个要求是等于”要求空间复杂度是O(1)“。
这里还看到另外一个概念“in-palce algorithm”与“out-place algorithm”
In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存
这确实是O(1)与O(n)的区别。
还有人分析道
Without extra space (more commonly ‘in-place’) will mean O(1) space complexity, but that is not reversible, O(1) does NOT strictly mean without extra space.
意思是不占用额外内存就是O(1)空间复杂度,但O(1)空间复杂度并不严格意味着不占用额外内存。
我在搜寻中发现,不占用额外内存,是一个不太现实以及模糊的概念。
因为总要创建变量来控制循环,来存储计算过程的中间结果。
而且额外空间是相对于什么“额外”的并没有明确说明。
总的来说,不占用额外空间还是偏向于O(1)复杂度的,以后就不用太纠结了。
内容参考:
https://www.quora.com/What-is-the-difference-between-O-1-space-and-without-using-extra-space