python(leetcode)-283移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明: 必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
说下拿到这道题时的思路:
给人的感觉并不难,首先的想法就是遍历数组中每一个元素,判断如果为0则删除,同时末尾增加0
上代码(通过240ms)击败20%的用户
class Solution:
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
for i in nums:
if(i==0):
nums.remove(i)
nums.append(0) if __name__=="__main__":
s=Solution()
nums=[0,1,0,3,12]
print(s.moveZeroes(nums))
代码非常简洁,只有短短4行,但是对比其他方法效率却不高,
分析代码的时间复杂度
外层for循环需要N次,remove(i)需要N次,append()方法1次
所以时间复杂度为O(n^2)
换一种方法,上代码(通过) 56ms 击败99%
class Solution:
def moveZeroes(self,nums):
""" :param nums:
:return:
"""
count=0
zero=0
for i in range(len(nums)):
if(nums[i]!=0): #判断是否为0
nums[count]=nums[i] #不是0的数向前移
count+=1 #移动一个 计数加一
else:
zero+=1
for j in range(count,len(nums)): #把最后位置补0
nums[j]=0
return nums
if __name__=="__main__":
s=Solution()
nums=[0,1,0,3,12]
print(s.moveZeroes(nums))
思路在代码中有注释
分析下时间复杂度:
for循环有N次,if语句1次,赋值语句1次,++1次
第二个for循环N次,赋值语句1次
两个for循环是并列关系 所以时间复杂度为O(n) 可以发现确实速度快了很多
python(leetcode)-283移动零的更多相关文章
- 前端与算法 leetcode 283. 移动零
目录 # 前端与算法 leetcode 283. 移动零 题目描述 概要 提示 解析 解法一:暴力法 解法二:双指针法 算法 传入[0,1,0,3,12]的运行结果 执行结果 GitHub仓库 # 前 ...
- Java实现 LeetCode 283 移动零
283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必 ...
- Leetcode 283.移动零 By Python
思路 我们可以用python的list comprehension来取出所以非0的元素,而且这样取出来会保持原有的相对顺序,再统计先后变化的长度,补上相应的0即可 代码 class Solution( ...
- Leetcode 283.移动零
移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组 ...
- LeetCode:移动零【283】
LeetCode:移动零[283] 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3 ...
- 【Leetcode】【简单】【283. 移动零】【JavaScript】
题目描述 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12]输出: [1,3,12,0,0] 说 ...
- 【LeetCode】283.移动零
283.移动零 知识点:数组:双指针: 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例 输入: [0,1,0,3,12] 输出: [1, ...
- 【Python教程】《零基础入门学习Python》(小甲鱼)
[Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609
- LeetCode:打印零与奇偶数【1116】
LeetCode:打印零与奇偶数[1116] 题目描述 假设有这么一个类: class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } // 构造函数 ...
随机推荐
- PNP的学习-P3P
PNP方法是为了解决在当前两帧图像中,已知前一帧图像上的3dLandmark点和当前帧的2d特征点,求取当前帧的pose. PNP主要有P3P.EPNP.UPNP.DLT.MRE(LS Iterati ...
- 通俗易懂--SVM算法讲解(算法+案例)
1.SVM讲解 新闻分类案例 SVM是一个很复杂的算法,不是一篇博文就能够讲完的,所以此篇的定位是初学者能够接受的程度,并且讲的都是SVM的一种思想,通过此篇能够使读着会使用SVM就行,具体SVM的推 ...
- 每日一练ACM
2019.04.15 第1000题:A+B Problem Problem DescriptionCalculate A + B. InputEach line will contain two in ...
- Python 知识小tips
python进制转换函数: 二进制转换成十进制:v = "0b1111011" # int(v,2) 十进制转换成二进制:v = 18 # ...
- unic
在线考试 答题剩余时间0小时51分18秒 考生须知 1.本次考试结束后,剩余补考次数:2次 2.考试时间为60分钟,超时系统自动交卷 3.本次考试满分100分(5*20道),60分通过考试 1. (单 ...
- php签名认证
一.概述 开年第一篇,该篇主要讲述了接口开发中,如何安全认证.如何用php签名认证. 二.说说历史 签名认证是什么?为什么要做签名认证?签名认证哪里会用到?no.no.no.....是不是,是不是,一 ...
- C#实现全局快捷键(系统热键)响应(转)
转自http://www.cnblogs.com/Randy0528/archive/2013/02/04/2892062.html 在应用中,我们可能会需要实现像Ctrl+C复制.Ctrl+V粘贴这 ...
- Xamarin常见问题
1. Could not locate Java 6 or 7 SDK. (Download from http://www.oracle.com/technetwork/java/javase/do ...
- Xaml引用图片路径的方式
最近写代码的时候遇到过好几次引用某个路径下图片资源的情况,思索了一下,便将自己所知的在xaml里引用图片资源的方法写成了个小Demo,并完成了这篇博文.希望罗列出的这些方式能够对大家有所帮助. Xam ...
- Djangoの1
有ip无路由是404,ip也无是无法访问此网站.url中?前的是路由,?后是GET请求的各组参数. 子项目和子应用下的两类urls.py:[]内的各个路由函数url,其首参网址的开头无/,结尾有/ ...