当前位置: 首页> 游戏> 游戏 > Leetcode 283 移动零

Leetcode 283 移动零

时间:2025/7/9 23:07:36来源:https://blog.csdn.net/u011699626/article/details/141324529 浏览次数:0次

引言

今天,看到了一个双指针算法,构思非常巧妙。这里特来记录一下。

正文

在这里插入图片描述
本题,我们使用两个指针,一左一右,右侧指针不断向右侧移动,如果右侧指针所指向的数据值不为 0,那么我们就交换右侧指针和左侧指针的数据,且左侧指针向右侧位移一个位置。这样就可以将所有不为 0 的元素按照顺序放置到左指针的左侧。遇到右侧指针指向元素为 0 的情况,我们不做任何操作,继续将右侧指针向右侧位移一个元素。直至右侧指针抵达最后一个元素位置处结束。通过这种方法,就可以将为 0 的元素统一位移到左侧指针的右侧。最终左侧指针位置的左侧全部不为 0, 右侧全部为 0

from typing import Listdef move_list_element(nums: List[int]):left = 0for i in range(len(nums)):if nums[i] != 0:nums[left], nums[i] = nums[i], nums[left]left += 1return numsif __name__ == '__main__':nums_ = [0, 1, 0, 3, 12]result = move_list_element(nums_)print(result)
"""
[1, 3, 12, 0, 0]
"""

上述代码中的 left 表示左指针,i 表示右指针。
对于双指针,最清晰的写法是使用 while 循环。如下:

from typing import Listdef move_list_element(nums: List[int]):left = 0right = 0n = len(nums)while right < n:if nums[right] != 0:nums[left], nums[right] = nums[right], nums[left]left += 1right += 1return numsif __name__ == '__main__':nums_ = [0, 1, 0, 3, 12]result = move_list_element(nums_)print(result)
"""
[1, 3, 12, 0, 0]
"""

如果大家觉得有用,就请点个赞吧~

关键字:Leetcode 283 移动零

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: