当前位置:网站首页>LeetCode #283.移动零
LeetCode #283.移动零
2022-07-29 05:24:00 【张楚明ZCM】
题目截图
方法一:两次遍历
利用两次循环,第一次循环记录数组中非零的部分并覆盖原数组。记录数组中零元素个数。
第二次循环从n-count开始,将数组末尾部分的元素赋值为零。
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
count = 0
j = 0
for i in range(0, n):
if nums[i]==0:
count += 1
else:
nums[j] = nums[i]
j += 1
for i in range(n-count, n):
nums[i] = 0
完整测试代码
from typing import List
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
count = 0
j = 0
for i in range(0, n):
if nums[i]==0:
count += 1
else:
nums[j] = nums[i]
j += 1
for i in range(n-count, n):
nums[i] = 0
class main:
a = Solution()
nums = [6,0,53,0,11,25,7]
a.moveZeroes(nums)
print(nums)
if __name__ == '__main__':
main()
方法二:双指针
设置两个指针,刚开始的时候都指向位置0处的元素。碰到非零元素则左右两个指针交换元素,然后同时右移两个指针。碰到零元素则只移动右指针,此时左指针停留在零元素的位置上。直到右指针找到非零元素后再次交换元素,然后同时右移。
当左右指针指向同一位置的时候,交换元素等价于没有操作。
当做指针发现移动到零元素上时,一直移动右指针后再交换,意味着不断的寻找后面的非零元素填充前面的位置。
def moveZeroes(self, nums: List[int]) -> None:
n = len(nums)
left, right = 0, 0
for right in range(0, n):
if nums[right] == 0 :
right += 1
else:
nums[right], nums[left] = nums[left], nums[right]
right += 1
left += 1
或者把right += 1提到判断语句外面
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
n = len(nums)
left, right = 0, 0
for right in range(0, n):
if nums[right] != 0 :
nums[right], nums[left] = nums[left], nums[right]
left += 1
right += 1
边栏推荐
- 抽象封装继承多态
- From entry to soul: how to use tb6600 single chip microcomputer to control stepping motor with high precision (42/57)
- Ml6 self study notes
- 基于51单片机的四路抢答器仿真
- 【软件工程之美 - 专栏笔记】22 | 如何为项目做好技术选型?
- 【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
- 基于F407ZGT6的WS2812B彩灯驱动
- Hal library learning notes-10 overview of Hal library peripheral driver framework
- 网络安全学习篇
- LeetCode #876.链表的中间结点
猜你喜欢
Ml8 self study notes LDA principle formula derivation
LeetCode #344.反转字符串
倾角传感器用于通信铁塔、高压电塔长期监测
Logistic regression - project practice - credit card detection task (Part 2)
封装——super关键字
【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?
SimpleFOC+PlatformIO踩坑之路
LoRa开启物联网新时代-ASR6500S、ASR6501/6502、ASR6505、ASR6601
FPGA based: moving target detection (schematic + source code + hardware selection, available)
Zero basics FPGA (5): counter of sequential logic circuit design (with introduction to breathing lamp experiment and simple combinational logic design)
随机推荐
关于【链式前向星】的自学理解
CS5340国产替代DP5340多比特音频 A/D 转换器
【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议
synchronized八锁现象理解
爬虫Requests库的一些简单用法
Hal library learning notes - 8 use of serial communication
智慧能源管理系统解决方案
【软件工程之美 - 专栏笔记】20 | 如何应对让人头疼的需求变更问题?
Reading papers on false news detection (5): a semi supervised learning method for fake news detection in social media
【软件工程之美 - 专栏笔记】17 | 需求分析到底要分析什么?怎么分析?
基于stm32的四针OLED显示
Logistic regression - project practice - credit card detection task (Part 2)
Multithreading and concurrency
Hal library learning notes - 9 DMA
充电桩充电技术新能源充电桩开发
关于时间复杂度的个人看法
【软件工程之美 - 专栏笔记】22 | 如何为项目做好技术选型?
基于msp430f2491的proteus仿真
JUC集合类不安全
扬尘噪声监控系统