【Golang】LeetCode 283. 移动零

283. 移动零

题目描述

思路

这道题目需要我们在不复制数组的情况下,原地对数组进行操作并完成"将零移动到数组的末尾,剩余的元素顺序不变"的操作,并且要求时间复杂度尽可能的低。我们可以使用双指针的思路来解决当前问题。

具体来说,我们设置一对快慢指针slowfastfast指针用于对数组进行遍历并寻找数组当中的非零元素,而slow指针指向的是下一个需要放置nums[fast]所对应的非零元素的位置。

开始遍历数组之后,我们需要判断nums[fast]当前所指的位置的值是否为0,如果不为零的话,我们就交换nums[slow]nums[fast],并同时向后移动slow,原因是我们将slow指向的位置定义为下一个放置非零元素的位置。

显然,如果一个数组最开始的几个元素都是非零元素,则此时slowfast会同时向后移动,值的交换操作实际上是无效的。只有当nums[fast]真正遍历到零元素的时候,slow才会停止移动,表明此时所指向的位置的元素是0,下一个fast遍历到的非零元素应该放置过来。

基于以上思路,我们写代码来解决问题。

Golang 题解

go 复制代码
func moveZeroes(nums []int)  {
    slow, fast := 0, 0
    n := len(nums)
    
    for fast < n {
    if nums[fast] != 0 {
            nums[slow], nums[fast] = nums[fast], nums[slow]
            slow ++
        }
        fast ++
    }
}

Python 题解

python 复制代码
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        slow, fast = 0, 0
        while fast < len(nums):
            if nums[fast] != 0:
                nums[slow], nums[fast] = nums[fast], nums[slow]
                slow += 1
            fast += 1
        
相关推荐
老鼠只爱大米5 小时前
LeetCode经典算法面试题 #45:跳跃游戏II(贪心法、动态规划、BFS等多种实现方案详解)
算法·leetcode·贪心算法·动态规划·bfs·java面试·跳跃游戏ii
黎阳之光5 小时前
黎阳之光:数智硬核技术赋能应急管理装备创新,筑牢安全防线
大数据·人工智能·科技·算法·安全
童话ing5 小时前
【Golang】sync.Map底层原理解析
开发语言·后端·golang
进击的小头5 小时前
第19篇:卡尔曼滤波器与MPC模型预测控制器的结合实战
python·算法
2501_908329855 小时前
C++中的装饰器模式
开发语言·c++·算法
2301_788770555 小时前
OJ模拟2
数据结构·算法
Q741_1475 小时前
每日一题 力扣 3548. 等和矩阵分割 II 前缀和 哈希表 C++ 题解
算法·leetcode·前缀和·矩阵·力扣·哈希表
木井巳5 小时前
【递归算法】全排列 Ⅱ
java·算法·leetcode·决策树·深度优先·剪枝
Fcy6485 小时前
算法竞赛有关数据结构的补充(3)—— 二叉树、堆和哈希表的静态实现(包括红黑树和AVL树动态实现)
数据结构·算法·散列表