Luk*_*keH 32
就地意味着您应该更新原始字符串而不是创建新字符串.
根据您使用的语言/框架,这可能是不可能的.(例如,字符串在.NET和Java中是不可变的,因此如果不诉诸某些邪恶的黑客,就不可能执行字符串的就地更新.)
pol*_*nts 10
就地算法O(1)本质上只能使用额外的空间.数组逆转(基本上是面试问题归结为)是一个典型的例子.以下内容摘自维基百科:
假设我们想要反转n个项目的数组.一种简单的方法是:
Run Code Online (Sandbox Code Playgroud)function reverse(a[0..n]) allocate b[0..n] for i from 0 to n b[n - i] = a[i] return b不幸的是,这需要
O(n)额外的空间来创建阵列b,并且分配通常是一个缓慢的操作.如果我们不再需要a,我们可以使用这种就地算法用它自己的反转来覆盖它:Run Code Online (Sandbox Code Playgroud)function reverse-in-place(a[0..n]) for i from 0 to floor(n/2) swap(a[i], a[n-i])
有时候就地做某事很难.一个典型的例子是一般的非方阵矩阵换位.