给定一个数组nums,将所有的0移动到数组的末尾,同时保留非0元素的相对顺序;


/**
 * @brief 给定一个数组nums,将所有的0移动到数组的末尾,同时保留非0元素的相对顺序;
 * @param nums
 */

void moveZeros(vector<int>& nums){
    int i = 0,poz = 0;
    for(int i = 0; i < nums.size() && poz < nums.size();i++){
        while(poz < nums.size() && nums[poz] == 0)
            poz++;
        if(poz < nums.size())
            nums[i]=nums[poz];
        else
            i--;
        poz++;
    }

    for(;i<nums.size();i++){
        nums[i] = 0;
    }
}

void moveZeros(vector<int> &nums)
{
    int p1 = 0,p2=0;
    for(;p1<nums.size() && nums[p1]!=0;p1++);
    for(p2=p1;p2<nums.size();p2++){
        if(nums[p2] == 0) continue;
        nums[p1++] = nums[p2];
    }
    //set zero for rest items
    while(p1<nums.size()){
        nums[p1++] = 0;
    }
}

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 Leetcode练习(Python):第283题:移动零:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 Leetcode练习(Python):滑动窗口:第239题:滑动窗口最大值:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0 删除数组中为0元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9
 
粤ICP备18138465号  © 2018-2026 CODEPRJ.COM