【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
        
相关推荐
GoFly开发者8 分钟前
GoFly 社区 GMQT|国产自研 MQTT‑Broker,打造私有化物联网消息底座
物联网·mqtt·golang·mqtt broker·mqtt私有化部署
间歇性努力持续性发呆的野生快乐选手9 分钟前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
郝学胜_神的一滴35 分钟前
干货版《算法导论》17:双数极值配对与卡牌手牌编码最优解
数据结构·算法
nike0good1 小时前
Codeforces Round 1101 (Div. 2) 题解
算法
中年阿甘1 小时前
解析式布局-二次线长布局
线性代数·算法·矩阵
程序喵大人1 小时前
【C++进阶】STL算法与函数对象 -【C++进阶】STL算法与函数对象
开发语言·c++·算法
刘步权2 小时前
KY-RTI分布仿真技术:第十四章 Go程序设计
golang·hla·rti·高层体系结构·多语言仿真
鹿角片ljp2 小时前
LeetCode 53. 最大子数组和
算法·leetcode·职场和发展
江屿风3 小时前
【科普】【差集&交集概念落地云相册】流食般投喂
开发语言·c++·笔记·算法·云相册
数模竞赛Paid answer3 小时前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯