zoukankan      html  css  js  c++  java
  • leetcode283之移动零

    题目描述:

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

    示例:

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

    说明:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/move-zeroes

    代码实现:

      

     1 def moveZeros(nums):
     2     n = len(nums)
     3     for i in range(n):
     4         for j in range(n - i - 1):
     5             if nums[j] == 0:
     6                 nums[j], nums[j + 1] = nums[j + 1], nums[j]
     7 
     8     # return nums
     9 
    10 
    11 print("-------测试moveSeros()------")
    12 nums = [0, 1, 0, 3, 0, 12]
    13 moveZeros(nums)
    14 print(nums)
    15 
    16 
    17 def moveZeros1(nums):
    18     '''
    19     双指针法解决
    20     :param nums:
    21     :return:
    22     '''
    23     left, right = 0, 0
    24     while right < len(nums):
    25         if nums[right] != 0:
    26             nums[left], nums[right] = nums[right], nums[left]
    27             left += 1
    28             right += 1
    29         else:
    30             right += 1
    31 
    32 
    33 print("-------测试moveSeros()------")
    34 nums = [0, 1, 0, 3, 0, 12]
    35 moveZeros1(nums)
    36 print(nums)
    37 
    38 
    39 def bubbleSort(nums):
    40     '''
    41     冒泡排序
    42     :param nums:
    43     :return:
    44     '''
    45     n = len(nums)
    46     for i in range(n):
    47         for j in range(n - i - 1):
    48             if nums[j] > nums[j + 1]:
    49                 nums[j], nums[j + 1] = nums[j + 1], nums[j]
    50 
    51     return nums
    52 
    53 
    54 print("-----测试bububleSort(nums)-------")
    55 nums = [2, 1, 3, 5, 2]
    56 numSort = bubbleSort(nums)
    57 print(numSort)

    总结:上述采用两种方法实现,方法1参考冒泡排序思想,方法2采用双指针。方法2时间复杂度低,为O(N),方法1时间复杂度为O(N^2).顺带写出了冒泡排序。

    双指针实现过程:题目要求将0移动到数组后面,保持非零元素顺序不变,将其移到前面,因此双指针实现过程中,设定两个指针,快指针和慢指针,当快指针指向元素非零时,交换快指针和慢指针值,然后将快慢指针同时向后移动;当快指针指向元素为0时,向后移动,直至移动到数组末尾,结束循环。

    方法1参开冒泡排序思想,从头开始遍历数组,若元素为0,将该元素和下一个相邻元素交换,每遍历一遍,会移动一个0元素至数组末尾。

  • 相关阅读:
    解决linux下svn update 产生Node remains in conflict的问题
    实现本地svn目录同步时,服务器的相应目录保持自动同步
    linux下搭建SVN
    linux下安装pip与pip安装
    CentOS7下将Python的版本升级为3.7
    Linux基础二:初识linux命令
    泛型数组 + 记录类型 + Json 之间的转换
    TDictionary字典 记录 的赋值。
    TDictionary字典 对象的释放。。。
    基于 Intraweb 和 JQuery 的开发套件
  • 原文地址:https://www.cnblogs.com/rounie/p/13474741.html
Copyright © 2011-2022 走看看