LeetCode

来源:互联网 发布:java微信昵称特殊字符 编辑:程序博客网 时间:2024/05/20 18:43

题目链接:283. Move Zeroes


题意:给你一个数组nums,将这个数组中的0移动到数组的末尾。例:nums = [0, 1, 0, 3, 12],处理后,nums应该是1, 3, 12, 0, 0]
注:

  1. 您必须在本地进行此操作,而无需制作数组的副本。(实在不会翻译了)
  2. 尽可能减少操作的次数。

这里我的理解是不使用额外的存储空间并且尽可能减少数组中的数的移动次数,也就是通过最少次的移动达到我们的目的。


通过再次翻译这个题目,我似乎觉得我以前的做法是错误的,因为我的思路是移除数组中的0,在末尾上再补上相应个数的0,这里是否存在使用额外的空间,以及在注解的第一条中,是否只是禁止使用数组的copy,并不禁止使用某些数字。

对了,最后应该注意一点就是这个题目不要求返回数组,只要求修改数组,我们不需要返回值。


我的解法

class Solution:    def moveZeroes(self, nums):        nums += [0] * len([nums.remove(0) for x in range(nums.count(0))])

下面是两个大神的解法,思路是一样的,对数组进行排序,排序的规则是将所有数取反在正序排序,取反时0 > not 0(非0的数变为0,0变为非0),此时所有的0都会被排到后面。
大神解法一:

class Solution:    def moveZeroes(self, nums):        nums.sort(key = operator.not_)

大神解法二:

class Solution:    def moveZeroes(self, nums):        nums.sort(key = lambda x : not x)

两种解法的本质是一样的,但是区别就是一个使用了模块的方法,一个是自己写的方法,两者的效率差不多。

虽然我经过思考也写出了一行式的代码,但是和大神们比起来,无论是思路还是对模块的了解程度,都是相差甚远,还要继续努力学习啊。

以上。

原创粉丝点击