当前位置:网站首页>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
边栏推荐
- 《天才基本法》:平行时空的第二次选择,小演员的表现意外出圈
- mediaserver创建
- 二进制与内存
- Camera partial update
- @Autowired注解 --required a single bean, but 2 were found出现的原因以及解决方法
- shell文本编辑awk
- program internationalization
- 【CC3200AI 实验教程5】疯壳·AI语音人脸识别(会议记录仪/人脸打卡机)-定时器
- Robust Real-time LiDAR-inertial Initialization (Real-time Robust LiDAR Inertial Initialization) Paper Learning
- HACKTHEBOX——Bank
猜你喜欢
随机推荐
金融财经翻译的行业前景如何
数据仓库建模实践
Dynamic Web Development Fundamentals
How to write a high-quality test case?
如何快速成为一名软件测试工程师?测试员月薪15k需要什么技术?
使用curl指令发起websocket请求
网路编程_调试accept
Flink CDC 2.0及其他数据同步工具对比
Shell 文本三剑客 awk
flex 的 三个参数:flex-grow、flex-shrink、flex-basis
Robust Real-time LiDAR-inertial Initialization (Real-time Robust LiDAR Inertial Initialization) Paper Learning
uva1481
小程序wxs
js原型和原型链以及原型继承
二维空间下的向量旋转
元宇宙+NFT是“宝”还是“炒”
Example 046: Breaking the Cycle
vue项目 npm run build 打包项目防止浏览器缓存
【每日一题】大佬们进来看看吧
量化投资学习——在FPGA上运行高频交易策略