第四天-Move Zeroes
问题描述:给定一个数组num,编写一个函数,将所有0移到它的末尾,同时保持非零元素的相对顺序。
- 解法一:暴力解法:遍历数组,遇到0,寻找后面的不为0的数,交换两者
class Day4_Solution_1:
def __init__(self,nums):
self.nums = nums
def moveZeroes(self):
for i in range(len(self.nums)):
if self.nums[i] == 0:
for j in range(i+1,len(self.nums)):
if self.nums[j]!=0:
temp = self.nums[i]
self.nums[i] = self.nums[j]
self.nums[j] = temp
break
return self.nums
时间复杂度为O(n^2);空间复杂度为O(1)
- 解法二:双指针解法:一个指针指示当前所在的节点位置,另一个指针则从前向后遍历,如果遇到非零数字,则将其与当前节点位置交换,并且当前指针节点位置加1
class Day4_Solution_2:
def __init__(self,nums):
self.nums = nums
def moveZeroes(self,nums):
result = 0
for i in range(len(nums)):
if nums[i]!= 0:
temp = nums[i]
nums[i] = nums[result]
nums[result] = temp
result += 1
return nums
时间复杂度为O(n);空间复杂度为O(1)