day8【LeetCode力扣】283-移动零(双指针)
1.题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
2.题解
2.1双指针
c++
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slow=0,fast=0,rand;
int n=nums.size();
while(fast<n){
if(nums[fast]!=0){
rand=nums[slow];
nums[slow]=nums[fast];
nums[fast]=rand;
slow++;
}
fast++;
}
}
};
其中交换变量的部分可以使用swap()函数来替代
python
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
slow,fast=0,0
n=len(nums)
while(fast<n):
if nums[fast]!=0:
nums[slow],nums[fast]=nums[fast],nums[slow]
slow+=1
fast+=1
2.2python内置函数
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
for i in range(nums.count(0)):
nums.remove(0)
nums.append(0)
3.总结
其实这道题还有很多解法,比如可以使用一个指针存储不是零的位置,然后 其后的位置用0覆盖。方法很多,奇思妙想。
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!