Python每日一练-----移动零

(day35)

目录

题目:

题目分析:

解题思路:

解法一:✏

代码实现

解法二:✏

代码实现


题目:

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

⭐示例 1:

输入: nums = [0,1,0,3,12]

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

⭐示例 2:

输入: nums = [0]

输出: [0]

题目分析:

注意保持非零数的相对顺序,即因为0位置的变动其它非零数的索引都会改变。但如果原例表1的位置在2前,那么移动后1依旧要在2前。

解题思路:

解法一:✏

对于列表中0元素的移动到末尾,相当于将0元素删除,然后再添加到末尾。

我们可以使用remov()和appebd()方法实现这一过程。

remove()方法用于删除列表中的元素。remove(要删除的元素)

append()方法用于向列表添加的元素。append(要添加的元素)

appen()函数默认将加入的元素放在列表末尾。

代码实现

def moveZeroes(nums):
    for i in range(nums.count(0)):
        nums.remove(0)
        nums.append(0)
    return nums

解法二:✏

使用双指针,通过交换两个指针对应的元素实现将0元素以到末尾。我们可以在列表开头放置两个指针left和right。right指针行移动。

如果遇到非0数那么我们将left指针也向前移动使得left指针和right指针重合,那么交换两个指针对应的元素就是自己和自己交换不会又任何影响。

如果遇到0元素则不移动left指针,但是right指针向前移动。那么left就会在right指针后一个位置。这时候交换两个指针对应的元素那么0元素就会和后一个非0元素互换位置实现0元素的移动。

接着重复这一过程即可。

代码实现

def moveZeroes(nums):
    right = 0
    left = 0
    while right < len(nums):
        if nums[right] != 0:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
        right += 1

今天就到这,明天见。

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

你可能感兴趣的:(学习总结,力扣每日一卷,python,力扣,学习,指针)