给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:
必须在原数组上操作,不能拷贝额外的
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/mo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
n = len(nums)
left = right = 0
while right < n:
if(nums[right]!=0):
nums[left],nums[right] = nums[right],nums[left]
left += 1
right += 1
主要用双指针方法来解决此问题,初始LR指针都指向0个元素,R指针遇到0继续迭代,也就是L指在零位置,当R遇到非零则交换两个指针的数据,把右指针的非0数据赋给L,L的零赋给R形成交换,依此类推。
注意点,1.指针初始位置都指向0,左指针指向交换前或交换后的0元素 2. 右指针条件是判断交换的,每次判断条件成立后做两件事,交换元素,并且left指针加1,并且完成后right也要加1 3. 当right=0也要继续移动元素+1
思考的问题:两个指针的负责部分,如何交换,交换指针移动,以及迭代条件。
python对于数据交换有独立的方法 www.v2ex.com/t/483347