【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
        
相关推荐
地平线开发者2 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥2 小时前
匿名函数 lambda + 高阶函数
java·python·算法
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
我叫袁小陌3 小时前
算法解题思路指南
算法
地平线开发者3 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶
yuanyuan2o23 小时前
模型预训练:Hugging Face Transformers 基础
算法·ai·语言模型·自然语言处理·nlp·深度优先
杨充3 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
basketball6163 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
妄想出头的工业炼药师4 小时前
GS slam mono
算法·开源