【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;
        }
    }
};
相关推荐
736c1 分钟前
固件开发岗算法
数据结构·算法
青少儿编程课堂10 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛
冻柠檬飞冰走茶12 分钟前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
吴长建先生重名了27 分钟前
电商订单系统在Docker和Kubernetes中部署的高
算法
東隅已逝,桑榆非晚3 小时前
算法2. 双指针法-复写零
c++·笔记·学习·算法
云析赢指标公式网43 小时前
文华财经指标源码笔记:WINNER筹码函数、控盘变量与MACD变体的调试记录
java·笔记·算法
CC数分5 小时前
统计学基础|先把问题问对:数据分析的六大类型
大数据·人工智能·算法
文丑颜不良啊5 小时前
LeetCode1721~1740题目解析
java·leetcode
地平线开发者5 小时前
CLIP 的训练机制:从对比学习到图文对齐
深度学习·算法·自动驾驶
PaperAccept6 小时前
【研知有术论文发表】材料科学一区期刊,影响因子30+的纳米科技SCI,审稿严格但有效率
大数据·数据结构·科技·量子计算