Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Example:

Input: [,1,,3,12]
Output: [1,3,12,0,0]

原题地址: Move Zeroes

难度: Easy

题意:将数组内的0数移到数组末尾,非0值需要保证相对位置不变,比如上面例子中,非0值的顺序为 1, 3, 12 ,结果也得保证这个顺序

思路1:有点像冒泡,将数组0一个一个的移到末尾

代码描述:

循环{
如果值为0
     循环{
  当前值与下一个值交换
     }
}

代码:

n = len(nums)
i = 0
while i < n:
if nums[i] == 0:
j = i
while j < n-1:
nums[j], nums[j+1] = nums[j+1], nums[j]
j += 1
n -= 1
i -= 1
  i += 1

时间复杂度:O(n^2)

空间复杂度:O(1)

思路2:

先想一想,对数组进行一次遍历可以知道什么信息或者将数组改变成什么样子?

(1)可以找到任意一个数的位置(快排),存在数字交换

(2)找到最大(小)值(冒泡)

(3)统计各个数的个数

再看看快排(原地):

2    8    7    1    3    5    6     
将4作为分割点
2    1    3    4    8    7    5    6

一次排序之后,元素的相对位置没有改变,可以模仿这种写法,将非0数都移到数组的前面

代码:

class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
n = len(nums)
idx = -1
for i in range(n):
if nums[i] != 0:
idx += 1
nums[idx], nums[i] = nums[i], nums[idx]

时间复杂度:O(n)

空间复杂度:O(1)

最新文章

  1. android 帧动画,补间动画,属性动画的简单总结
  2. 【面试】shuffle函数的实现
  3. Python开发【第三篇】:Python基本之文件操作
  4. 9-this
  5. MongoDB上的索引
  6. 【Unity3D游戏开发】Application.systemLanguage无法区分简体中文和繁体中文 (二六)
  7. Oracle core05_事务和一致性
  8. 基于单个 div 的 CSS 画图
  9. 58 同城 iOS 客户端 iOS11 及 iPhone X 适配实践
  10. [poj3984]迷宫问题_bfs
  11. Python-包-65
  12. Django 反向解析
  13. 华硕ASUSPRO P5440UA笔记本电脑安装驱动
  14. fanuc 机床,加工中心通信总结,机床联网监控系统
  15. CSS3圆圈动画放大缩小循环动画效果
  16. 背景图宽高100%无法无法显示的问题【body设置relative,当前元素absolute】
  17. JAVA8函数式接口
  18. 剖析Hadoop和Spark的Shuffle过程差异
  19. 雷林鹏分享:jQuery EasyUI 表单 - 表单验证
  20. windows环境下安装Anaconda(Python)

热门文章

  1. SpringBoot第九篇:整合Spring Data JPA
  2. POJ2370【水题】
  3. .NET Core 跨平台物联网开发:设置委托事件(二)
  4. HDU - 6058 Kanade's sum
  5. Codeforces Round #408 (Div. 2) A
  6. 哈密顿图 BestCoder Round #53 (div.2) 1003 Rikka with Graph II
  7. vue文件中style标签的几个标识符
  8. getAttribute()方法的第二个参数
  9. Linux遗忘命令
  10. 外文翻译 《How we decide》多巴胺的预言 第一节