问题描述:

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

示例:

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

说明:

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

方法1:检测到为0纪录0的个数,不为0时进行赋值运算nums[i - k] = nums[i]

    最后将检测到的0补到nums的最后

 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         if len(nums) == 2:
 8             if nums[0] == 0:
 9                 nums[0],nums[1] = nums[1],nums[0]
10                 return
11             else:
12                 return
13         k = 0
14         for i in range(len(nums)):
15             if nums[i] == 0:
16                 k += 1
17             elif nums[i] != 0 :
18                 nums[i - k] = nums[i]
19         for j in range(len(nums) - k,len(nums)):
20             nums[j] = 0

方法2:每次将元素等于0的位置变成[]。

 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         i = 0
 8         length = len(nums)
 9         while i < len(nums):
10             while nums != [] and nums[i] == 0:
11                 nums[i:i+1] = []
12                 if i == len(nums):
13                     break
14             i += 1
15         nums += (length - len(nums))*[0]

将方法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         length = len(nums)
 8         i = 0
 9         n = 0
10         while i + n < length:
11             if nums[i] == 0:
12                 n += 1
13                 del nums[i]
14             else:
15                 i += 1
16         nums += [0]*n

2018-09-23 09:07:49

转载于:https://www.cnblogs.com/NPC-assange/p/9691993.html

LeetCode--283--移动0相关推荐

  1. [东哥的leetcode刷题日记] leetcode 283 : Move Zeroes

    leetcode 283 : Move Zeroes 题目链接: https://leetcode-cn.com/problems/move-zeroes/ 难度: 简单 归类 : 数组操作 题目: ...

  2. LeetCode算法题0:分发糖果【贪心算法】

    文章目录 前言 一.题目 二.思路详解 三.搞点实际点儿的(C++实现) 1.略显粗糙的代码实现 2.稍显精致的代码实现 3.最终的代码实现 4.提交结果 总结 前言 本文记录自己在LeetCode上 ...

  3. leetcode(283)移动零

    283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必 ...

  4. LeetCode 2169. 得到 0 的操作数

    文章目录 1. 题目 2. 解题 1. 题目 给你两个 非负 整数 num1 和 num2 . 每一步 操作 中,如果 num1 >= num2 ,你必须用 num1 减 num2 : 否则,你 ...

  5. leetcode算法题--0~n-1中缺失的数字

    原题链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/ int missingNumber(vector<int>&am ...

  6. Leetcode 283. 移动零 解题思路及C++实现

    解题思路: 只需做一次遍历,用一个数 count 和累加已出现的 0 的个数,当 nums[i]不等于0,且count 大于0时,将 nums[i] 向前移动count 位 即可. 最后,将数组的最后 ...

  7. leetcode 283. 移动零(Java版)

    题目 题解 定义一个变量 count,用于记录累计非 0 个数,可以理解为指向第一个 0 位置的指针. 对数组进行遍历,每当遇到非 0 元素时,将此元素复制到 count 指针所指向的位置. 数组遍历 ...

  8. LeetCode 283. Move Zeroes

    题目: Given an array nums, write a function to move all 0's to the end of it while maintaining the rel ...

  9. leetcode 283 Move Zeros; 27 Remove Elements; 26 Remove Duplicated from Sorted Array;

    int arr[] = {0,1,0,3,12}; //把数组的值赋给vector vector<int> vec(arr, arr+sizeof(arr)/sizeof(int)); 解 ...

  10. LeetCode 283 移动零

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非 零元素的相对顺序. 请注意 ,必须在不复制数组的情况下原地对数组进行操作. 解法一:使用i遍历数组,使用j标记数组下一个位 ...

最新文章

  1. Gif(1)-加载视图-交替圆效果
  2. 【模拟】Codeforces 710C Magic Odd Square
  3. SAP Hybris Commerce,CRM和C4C的登录语言选择
  4. Postman从入门到入门
  5. Java 并发编程之 ConcurrentHashMap,ConcurrentSkipListMap
  6. c++ java setobjectarrayelement_java中jni的使用:C/C++操作java中的数组
  7. 七,OpenERP 移库操作模块
  8. 暴汗~莫明其妙收到一张汇款单......
  9. 显卡mx150和230哪个好_MX130与MX150差距对比分析
  10. 那些年啊,那些事——一个程序员的奋斗史 ——16
  11. Java的随机数原理
  12. java qq协议 php_Java基于JavaMail实现向QQ邮箱发送邮件
  13. Hadoop/MapReduce 共同好友解决方案:求大量集合的两两交集
  14. 深度解析论文 基于 LSTM 的 POI 个性化推荐框架
  15. DS1602液晶显示学习笔记
  16. 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...
  17. 安卓街机模拟器对战源码修改详解(1)
  18. opencv边界扩充
  19. linux shell if参数---markx
  20. 苹果4s怎么越狱教程_苹果手机:iOS12怎么降级iOS12一键刷机降级教程

热门文章

  1. 政府数据泄漏频现 美国能源部也未幸免
  2. ubuntu14.04源无法更新--jdk安装出错解决方法
  3. RHEL6 Tiny Linux 的制作
  4. java开发之提高java和mysql代码性能和质量
  5. flex 错误信息类型及解决方法
  6. java字符串怎么拼接字符串_Java中String使用+ 拼接字符串的原理是什么?
  7. Mysql 批量更改数据表和字段的字符集(Mysql UTF-8字符集更改为utf8mb4字符集)
  8. [Java] 蓝桥杯ALGO-30 算法训练 入学考试
  9. PAT 乙级 1002. 写出这个数 (20) Java版
  10. 全国计算机二级C 错题/知识点整理