当前位置: 首页 > news >正文

【小白友好】leetcode 移动零

https://leetcode.cn/problems/move-zeroes/description/

小白思想

思想上还是首先开一个指针i,i从左到右扫每一个元素,i每发现一个0,就把这个0推到最后,这样i到最后就可以了。

这个和删除元素那个题解的小白思想和一模一样,只不过把val换成0,把元素交换更换成把元素推向最后的push_end就行了。代码我就不写了。。

def push_end(nums,left,right): # 按次序把left位置上的元素推到right位置dummy=nums[left]tmp=leftwhile tmp+1<=right:nums[tmp]=nums[tmp+1]tmp+=1    nums[right]=dummyreturn nums

因为小白思路简单直白但是代码写起来很啰嗦。

技巧

这是要记住的知识点

脑中脑中迅速闪过几个关键词:数组、数组划分部分、双指针 ======> 考虑快慢指针。

一般使用起来都是O(n),结束条件几乎都是快指针遍历结束,慢指针恰好在边界。不同点是慢指针的条件各不相同。

根据小白解法,我们让快指针去指向判定当前元素是否能进入左侧要保留部分的位置,慢指针指向保留部分的最后一个位置。也就是快指针做条件判断,慢指针做位置标识。

那么用什么条件作为快指针条件呢?
回归题意,我们希望左侧的都是不等于0,这样只要nums[fast]!=val,就可以把fast元素放到左侧了。

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""slow=0for fast in range(len(nums)):if nums[fast]!=0:# swaptmp=nums[fast]nums[fast]=nums[slow]nums[slow]=tmpslow+=1

这样写起来非常简洁,而且还能保持原先数组的顺序。小白看了都哭了……

http://www.lryc.cn/news/305803.html

相关文章:

  • 迭代、递归、尾递归实现斐波那契数列的第n项
  • vulnhub靶场之driftingblues-1
  • NGINX服务器配置实现加密的WebSocket连接WSS协议
  • 5个免费文章神器,用来改写文章太方便了
  • 详细教程!VMware Workstation Pro16 安装 + 创建 win7 虚拟机!
  • Python文件和异常(二)
  • 大模型+影像:智能手机“上春山”
  • 8-pytorch-损失函数与反向传播
  • MySQL高级特性篇(8)-数据库连接池的配置与优化
  • mac下使用jadx反编译工具
  • 分布式一致性软件-zookeeper
  • 企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复
  • 板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】
  • 自动驾驶---Motion Planning之Path Boundary
  • Leetcode 3048. Earliest Second to Mark Indices I
  • 从源码学习单例模式
  • axios介绍和使用
  • redis雪崩问题
  • [SUCTF 2019]EasySQL1 题目分析与详解
  • TestNG与ExtentReport单元测试导出报告文档
  • 【JavaEE】_form表单构造HTTP请求
  • Mysql中INFORMATION_SCHEMA虚拟库使用
  • 【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试
  • 常用的Web应用程序的自动测试工具有哪些
  • 人工智能与开源机器学习框架
  • 高通XBL阶段读取分区
  • [极客大挑战2019]upload
  • [FastDDS] 基于eProsima FastDDS的移动机器人数据中间件
  • 实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)
  • spring boot集成redis