【LeetCode热题100】【双指针】移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

复制代码
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

复制代码
输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

**进阶:**你能尽量减少完成的操作次数吗?

题解

暴力的话两层循环可以解决问题,但显然能不暴力就不暴力,这里有个O(n)的方法

反过来思考,直接先把不为0的元素放好,记录不是0的元素的位置i和数目one,遇到一个不为0的数直接放,最后的结果就是非0元素的相对顺序没变,然后把不为0元素后面的都变成0

复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int one=0;
        for(int i=0;i<nums.size();i++){
            if(nums[i]){
                nums[one++]=nums[i];
            }
        }
        while(one<nums.size()){
            nums[one++]=0;
        }
    }
};
相关推荐
Paul_09209 分钟前
golang编程题
开发语言·算法·golang
颜酱14 分钟前
用填充表格法-继续吃透完全背包及其变形
前端·后端·算法
夏秃然17 分钟前
打破预测与决策的孤岛:如何构建“能源垂类大模型”?
算法·ai·大模型
氷泠21 分钟前
课程表系列(LeetCode 207 & 210 & 630 & 1462)
算法·leetcode·拓扑排序·反悔贪心·三色标记法
代码or搬砖24 分钟前
JVM垃圾回收器
java·jvm·算法
老鼠只爱大米26 分钟前
LeetCode算法题详解 15:三数之和
算法·leetcode·双指针·三数之和·分治法·three sum
客卿12326 分钟前
C语言刷题--合并有序数组
java·c语言·算法
Qhumaing27 分钟前
C++学习:【PTA】数据结构 7-1 实验6-1(图-邻接矩阵)
c++·学习·算法
菜鸟233号41 分钟前
力扣416 分割等和子串 java实现
java·数据结构·算法·leetcode
Swift社区1 小时前
LeetCode 469 凸多边形
算法·leetcode·职场和发展