移动0到最末尾的位置
今天面试的时候被问到了,很蒙蔽,瞬间想到了几种方法,但是都不是最优解。回来发现还是自己5个月前做过的题目,真是应该反思一下为什么想不出来。
问题描述:将数组中的0移动到数组的末尾,并且空间复杂度是O(1)。
我瞬间能想到的方法就是利用一个新的数组,依次遍历原数组,如果为0,则统计0的个数并且跳过这个数,如果不为0,则将该数添加到新数组中,最后在新数组后添加0。
如何原地去做呢?其实很简单,思想上就是利用原数组来充当上文的新数组。比如有数组[0,1,2,3,2,0,0,21,2]。先创建一个变量 i用于表示非0数字的下标,那么如果遇到了0,则跳过,如果遇到了非0,则将其放在下标为 i 的位置即可。最后 i 的值就是非0的个数,添加 数组长度-i个0就可以了。
def removeZero(nums):
i = 0
for num in nums:
if num != 0:
nums[i] = num
i+=1
for k in range(i,len(nums):
nums[i] = 0
所以说这道题如果直到答案,算是很简单的。为什么我在面试的时候想不到呢?我的固定思维让我第一时间想到的是交换两个数,如果想的是交换两个数字来达到目的,那么路就走偏了。这种题目在思路上应该想到的是将除0以外的数看做一个整体,用一个 i 变量来维护它本来的顺序。
本文回顾了一道常见的面试题:如何将数组中的零元素移动到数组的末尾,同时保持非零元素的相对顺序,且空间复杂度为O(1)。文章分享了一个简单有效的方法,通过使用一个变量i来记录非零元素的当前位置,遍历数组并将非零元素放置在i位置,最后填充剩余位置为零。

694

被折叠的 条评论
为什么被折叠?



