当前位置:网站首页>leetcode 283:移动零
leetcode 283:移动零
2022-08-10 03:16:00 【Rolandxxx】
题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
自己的第一遍解法,for循环里参杂while,O(N2)的时间复杂度,耗时太多
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
""" Do not return anything, modify nums in-place instead. """
if nums is None or len(nums)==0 or len(nums)==1:
return nums
for i, num in enumerate(nums):
if nums[i] == 0:
cur = i
if cur == len(nums)-1:
return nums
while nums[cur+1]==0:
cur += 1
if cur == len(nums)-1:
return nums
tmp = nums[i]
nums[i] = nums[cur+1]
nums[cur+1] = tmp
return nums
优化解法:直接遍历一遍数组,碰到把不为0的值直接就按顺序放到数组index以0开始的对应位置上去,以此递增。
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
""" Do not return anything, modify nums in-place instead. """
index = 0
for num in nums:
if num != 0:
nums[index] = num
index += 1
for i in range(index,len(nums)):
nums[i]=0
边栏推荐
猜你喜欢
随机推荐
charles的功能操作
Difference between netstat and ss command
一个刚入行的测试员怎么样做好功能测试?测试思维真的很重要
带你深入理解3.4.2的版本更新,对用户带来了什么?
matlab simulink响应谱计算
同样是初级测试,凭什么他比我薪资高 5000 块?
互联网公司高频面试题精讲:测试计划和测试方案有什么区别?
flink 12 源码编译及使用idea运行、debug
Example 043: Scope, class methods and variables
全面深入了解什么是反向代理和负载均衡
applet wxs
mediaserver创建
How to write a high-quality test case?
书法家唐效奇
一文教会你快速上手 Vim
Recommend several easy-to-use MySQL open source clients, it is recommended to collect
shell文本编辑awk
如何让导电滑环信号更好
netstat和ss命令区别
leetcode-218.天际线问题