概述
题目:
题解:空间最优,操作局部优化(双指针)
fast指针用来找到非0元素,然后来覆盖slow之前的元素。最后非0元素全部排在数组的前面,也保持了原本的相对顺序,而slow指针之前的元素已全为非0的元素了,只需将slow指针到数组剩下的元素改为0即可。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//双指针法:时间复杂度为O(n),空间复杂度为O(1),slow表示慢指针,i表示快指针
int slow=0;
//将非0元素填充到数组的前面,覆盖前面的元素,也保持了元素间的相对顺序
//slow慢指针之前的元素都是非0的
for(int i=0;i<nums.size();++i)
if(nums[i]!=0)
nums[slow++]=nums[i];
for(int i=slow;i<nums.size();++i)
nums[i]=0;
}
};
最优解:时间复杂度为O(n),空间复杂度为O(1)
1、慢指针(lastnonzerofoundat)之前的所有元素都是非零的。
2、快指针和慢速指针之间的所有元素都是零。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//快指针遇到非0元素就与慢指针所指的元素交换,最后的话快指针与慢指针之间的元素都为0
for(int slow=0,i=0;i<nums.size();++i)
if(nums[i]!=0)
swap(nums[slow++],nums[i]);
}
};
最后
以上就是正直音响为你收集整理的[双指针]leetcode283:移动零(easy)(最优解)的全部内容,希望文章能够帮你解决[双指针]leetcode283:移动零(easy)(最优解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复