LeetCode热题100精讲——Top4:移动零【双指针】
|
文章目录
- 题目背景
- 移动零
- C++解法
- Python解法

题目背景
如果大家对于 双指针 的概念并不熟悉, 可以先看我之前为此专门写的算法详解:
蓝桥杯算法竞赛系列第七章——六道力扣经典带你刷爆双指针
移动零
题目链接:移动零
解题思路:本题是个简单题
先移除所有 0,然后把最后的元素都置为 0,就相当于移动 0 的效果。
代码详解:
C++解法
class Solution {
public:
void moveZeroes(vector<int>& nums)
{
// 先将0全部移除, 再将后面的值赋值为0
int index = moveNum(nums, 0);
for(int i = index; i < nums.size(); i++)
nums[i] = 0;
}
// 将值为val的元素全部移除
int moveNum(vector<int>& nums, int val)
{
// 定义快慢指针 - fast指针在前面探路
int slow = 0, fast = 0;
while(fast < nums.size())
{
if(nums[fast] != val)
{
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
};
Python解法
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
# 将0值全部移除,然后将后面的值全部赋值为0
index = self.moveNum(nums, 0)
for i in range(index, len(nums)):
nums[i] = 0
def moveNum(self, nums: List[int], val: int) -> int:
"""
将数组中值为val的元素全部移除, 并返回slow的下标
"""
# 定义快慢指针 - 快指针在前面探路
slow, fast = 0, 0
while fast < len(nums):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
|
|