【问题标题】:Do not return anything, modify nums in-place instead不要返回任何东西,而是在原地修改 nums
【发布时间】:2017-01-08 21:38:30
【问题描述】:

问题和我的代码如下。但是,我仍然收到一条消息说“不要返回任何东西,而是就地修改 nums”。谁能解释一下为什么我的代码没有“就地”计算?谢谢!

给定一个数组 nums,编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序。 例如,给定 nums = [0, 1, 0, 3, 12],调用你的函数后,nums 应该是 [1, 3, 12, 0, 0]。

注意: 您必须在不复制数组的情况下就地执行此操作。 尽量减少操作的总数。

class Solution(object):

    def moveZeroes(self, nums):
        count=0
        for i in range(len(nums)):
            if nums[i]==0:
                a=nums.pop(i)                                   
                nums.append(a)
        return nums

【问题讨论】:

  • 明明说“不退货”,那你为什么要退货呢?
  • 评论return nums并将其更改为#return nums
  • 是什么给出了消息“不要返回任何东西,而是在原地修改nums。”?这是用于评估您的代码的一些系统吗?我们应该怎么知道呢?
  • 只要删除return语句,函数就会返回None,这会算作not 'anything'。具有讽刺意味的是,您确实 就地进行了修改,但没有 使用请求的最少操作。每个元素只需要移动一次,因此应该只移动一次。

标签: python algorithm list


【解决方案1】:
nums = [0, 1, 0, 3, 12]

def moveZeroes(nums):
  pos = 0
  for i in range(len(nums)):
    if nums[i]:
      nums[i], nums[pos] = nums[pos], nums[i]
      pos += 1

moveZeroes(nums)
print(nums)

输出:

[1, 3, 12, 0, 0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多