【数组+双指针】LeetCode 283. Move Zeroes

题目描述

在这里插入图片描述

知识点

数组,双指针

结果

在这里插入图片描述

实现

码前思考

  1. 典型的双指针题目,一个指针用于遍历数组,一个指针用于记录非0数字的末尾;

代码实现

//遍历一遍就好了,后面直接补0,bye da~
class Solution {
public:
    //记录非0的末尾
    int pos=0;
    void moveZeroes(vector<int>& nums) {
        for(int i=0;i<nums.size();i++){
            if(nums[i] != 0){
                nums[pos] = nums[i];
                pos++;
            }
        }
        while(pos!=nums.size()){
            nums[pos] = 0;
            pos++;
        }
    }
};

码后反思

  1. 其实这道题目还好;
  2. 有一种更简单的方法,可以最小化,操作次数:
    void moveZeroes(vector<int>& nums) {
        for (int lastNonZeroFoundAt = 0, cur = 0; cur < nums.size(); cur++) {
            if (nums[cur] != 0) {
                swap(nums[lastNonZeroFoundAt++], nums[cur]);
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值