博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 移动零
阅读量:6403 次
发布时间:2019-06-23

本文共 1728 字,大约阅读时间需要 5 分钟。

https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/28/

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

此题有两个思路:

1. 采用类似于冒泡排序的思想,从后往前遍历,如果遇到0就把0和后面的数字交换位置,直到最后一个可用位置(需要记录)。时间复杂度是O(N^2),空间复杂度是O(1)

1 class Solution(object): 2     def moveZeroes(self, nums): 3         """ 4         :type nums: List[int] 5         :rtype: void Do not return anything, modify nums in-place instead. 6         """ 7         index_range = range(len(nums)) 8         reverse_index_range = index_range[::-1] 9         available_location = len(nums) - 110         for i in reverse_index_range:11             if nums[i] != 0:12                 continue13             else:14                 j = i + 115                 while True:16                     if j > available_location:17                         break18                     temp = nums[j-1]19                     nums[j-1] = nums[j]20                     nums[j] = temp21                     j = j + 122                 available_location -= 1

 

2. 遍历第一次,将所有的非零值都移动到最前面,压缩的思想;遍历第二次,将前面压缩后的剩余空间都置0。时间复杂度是O(N),空间复杂度是O(1)

1 class Solution(object): 2     def moveZeroes(self, nums): 3         """ 4         :type nums: List[int] 5         :rtype: void Do not return anything, modify nums in-place instead. 6         """ 7         available_location = 0 8         for i in range(len(nums)): 9             if nums[i] == 0:10                 continue11             else:12                 nums[available_location] = nums[i]13                 available_location += 114         for i in range(available_location,len(nums)):15             nums[i] = 0

 

转载于:https://www.cnblogs.com/gremount/p/9565274.html

你可能感兴趣的文章
[网摘学习]在Ubuntu上安装和配置OpenStack Nova之二
查看>>
想挖大数据价值,你得先“挖人”!
查看>>
core dump磁盘报警问题排查过程
查看>>
Nginx报 No input file specified. 的问题解决之路
查看>>
Design Pattern: Not Just Mixin Pattern
查看>>
Ubuntu14.04下安装Hadoop2.5.1 (单机模式)
查看>>
kettle入门与实战(视频教程)
查看>>
简单JNI使用demo
查看>>
框架开发管理流程图
查看>>
Java 容器 & 泛型:四、Colletions.sort 和 Arrays.sort 的算法
查看>>
GDB的两个技巧
查看>>
PHP MysqlND 简介
查看>>
iOS面试题
查看>>
使用JavaIO提供的API下载指定文件(image)
查看>>
Android给图像添加相框、圆形圆角显示图片、图像合成知识
查看>>
Cloudera Hadoop:CCAH、CCA、CCP
查看>>
通过资源编排快速的构建负载均衡(SLB)
查看>>
<秦时明月>---月光
查看>>
网站设计选择大于努力
查看>>
Java设计模式(十七)----责任链模式
查看>>