我是靠谱客的博主 正直音响,最近开发中收集的这篇文章主要介绍[双指针]leetcode283:移动零(easy)(最优解),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:
在这里插入图片描述
题解:空间最优,操作局部优化(双指针)
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)(最优解)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部