zoukankan      html  css  js  c++  java
  • LeetCode--283--移动0

    问题描述:

    给定一个数组 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

  • 相关阅读:
    Oracle 的日期类型
    简单的同步Socket程序服务端
    MMORPG中的相机跟随算法
    使用了UnityEditor中的API,打包时却不能打包UnityEditor的问题
    C# 中的关键字整理
    Unity3D C#中使用LINQ查询(与 SQL的区别)
    C# 值类型与引用类型的异同
    Unity3D NGUI事件监听的综合管理
    Unity3D 动画状态机简单控制核心代码
    Unity3D判断触摸方向
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/9691993.html
Copyright © 2011-2022 走看看