"就地"是什么意思?

Nib*_*Pig 22 semantics

字符串中的反转单词(单词由一个或多个空格分隔).现在就地进行.

就地是什么意思?

Luk*_*keH 32

就地意味着您应该更新原始字符串而不是创建新字符串.

根据您使用的语言/框架,这可能是不可能的.(例如,字符串在.NET和Java中是不可变的,因此如果不诉诸某些邪恶的黑客,就不可能执行字符串的就地更新.)

  • 对于.NET或Java,问题可以改为讨论一组字符或StringBuilder (7认同)

pol*_*nts 10

就地算法O(1)本质上只能使用额外的空间.数组逆转(基本上是面试问题归结为)是一个典型的例子.以下内容摘自维基百科:

假设我们想要反转n个项目的数组.一种简单的方法是:

function reverse(a[0..n])
    allocate b[0..n]
    for i from 0 to n
       b[n - i] = a[i]
    return b
Run Code Online (Sandbox Code Playgroud)

不幸的是,这需要O(n)额外的空间来创建阵列b,并且分配通常是一个缓慢的操作.如果我们不再需要a,我们可以使用这种就地算法用它自己的反转来覆盖它:

function reverse-in-place(a[0..n])
    for i from 0 to floor(n/2)
       swap(a[i], a[n-i])
Run Code Online (Sandbox Code Playgroud)

有时候就地做某事很难.一个典型的例子是一般的非方阵矩阵换位.

也可以看看

  • @penguat:矩阵将存储在6个元素的一维数组中.换位从行主要切换到列主要,反之亦然,例如`ABCDEF`到`ADBECF`. (2认同)

Cha*_*les 5

您应该将原始字符串的内容更改为反向,而不使用临时存储变量来保存字符串.

  • 好吧,我的意思是一个存储变量来保存临时值.根据语言,您确实需要计数器或指针. (2认同)