算法随笔_31:移动零

上一篇:算法随笔_30: 去除重复字母-CSDN博客

=====

题目描述如下:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

复制代码
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

=====

算法思路:

题目要求原地对数组进行操作。我们可以设两个下标指针p1,p2,p1=0,p2=0。

然后从左往右枚举数组,先不断移动p2,如果p2处不为0,我们把p1的元素和p2所指元素交换,然后继续移动p1。如果p2处为0,我们继续移动p2。

以此类推,直到p2到达数组末尾。此时的数组已经符合题目要求。

复制代码
class Solution(object):
    def moveZeroes(self, nums):
        
        p1=0
        p2=0
        nums_len=len(nums)
        while p2<nums_len:
            if nums[p2]!=0:
                nums[p1],nums[p2]=nums[p2],nums[p1]
                p1+=1
            
            p2+=1

此算法的时间复杂度为O(n) 。

相关推荐
blank@l18 小时前
python测开小工具--日志查询分析工具
python·python接口自动化测试基础·python测试开发·日志查询分析·日志分析统计查询·软件测试工具·argparse模块
MobotStone18 小时前
数字沟通之道
人工智能·算法
hu_nil18 小时前
LLMOps-第十三周
python·vllm
空影星18 小时前
轻量日记神器RedNotebook,高效记录每一天
python·数据挖掘·数据分析·音视频
点云SLAM18 小时前
Boost库中Math 模块的插值(interpolation使用和示例
算法·插值·boost库·b-spline·akima 样条·单调三次样条·barycentric 插值
鸭子程序员18 小时前
c++ 算法
开发语言·c++·算法
Ghost-Face18 小时前
《逆袭导论》————初中生的宝书
算法
不会c嘎嘎19 小时前
算法百练,直击OFFER -- day5
c++·算法
搬砖ing换来金砖19 小时前
Python入门-Task02
开发语言·python
databook19 小时前
告别盲人摸象,数据分析的抽样方法总结
后端·python·数据分析