leetcode-移动0 把0看作null也许会更好理解

力扣移动零,如果把0看作空可能更好理解
最普遍的做法是双指针,一个指针放在初始位置,一个指针不断地向后遍历。
其实有一个很好理解的思路,就是把0看作null,就非常好理解这个过程。
我们需要做的就是 在快指针(或者说右指针)不断向后遍历的过程中,如果当前遍历到的数是非null(也就是不为0)我们就把他向前移动。也就是说,把他填充到前面的第一个空的位置上(放到原题来看,就是放到前面第一个不为0的位置上)。
先看代码逻辑:
1 | while(fast<nums.length){ |
为了方便理解,还是看图。
发现1不为0,执行逻辑,nums[0]和nums[0]交换,没有任何影响。
此时左右(快慢)指针同时加1.
遇到2,同理。
这个时候 发现遇到了为空(0)的元素,这时候,右指针(快指针)就要不断向后遍历寻找下一个不为0的元素了。
直到:
此时,就进行填充,填充第一个为空的元素(也就是为0的元素)
执行完这一层while的逻辑,就是像上面这张图这样。
那这段while执行完会是怎样的呢?
有没有发现,我们已经把所有非空(0)的元素按照相对位置这段序列放到了整个数组的前段部分,并且左指针指向的位置就是这个序列末尾的下一个位置。那这个时候,我们只要用左指针遍历到末尾,将所有的元素置为空(0),也就满足了我们题目的需求。
1 | while(slow<nums.length){ |
- 标题: leetcode-移动0 把0看作null也许会更好理解
- 作者: Sal
- 创建于 : 2025-07-03 17:40:30
- 更新于 : 2025-07-25 22:13:22
- 链接: https://redefine.ohevan.com/posts/48828/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论