【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
        
相关推荐
罗西的思考6 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha60166 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘7 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法
维克兜率天9 小时前
【维克】动量指标家族:RSI、ROC、CCI、Momentum全面解析
python·算法
AI情绪识别开源10 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
老当益壮梁奶奶10 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b11 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生11 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试
伟大的车尔尼11 小时前
贪心的概念
数据结构·算法·贪心
方方洛11 小时前
vllm教程-00-前言与导读
人工智能·算法·vllm