js快速排序 web开发 dedecms razor reflection hive odbc mac安装hadoop mysql更新多个字段 html好看的字体 oracle增加主键 python迭代器 python基础语法 python的open函数 python类与对象 python下载安装教程 python的random模块 python插件 java语法基础 java的string java字符串反转 java的环境配置 怎么安装linux系统 matlab2016a安装教程 日历制作模板 stretchcolumns 心理学与生活pdf js字符转数字 软件龙头股 js刷新当前页 directx卸载 ps平面广告设计教程 华为杂志锁屏怎么设置 php验证码 xlwt qq浏览器手机 接口自动化测试框架 日文游戏乱码转换工具 视频抠图 抖音道具
当前位置: 首页 > 学习教程  > 编程语言

LeetCode 283 移动零(两次遍历与一次遍历方法)

2020/12/5 9:53:38 文章标签:

题目描述 题目链接 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 解题思路…

题目描述

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

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

解题思路一

本题把不是零的数往数组的前面放,用index记录位置,之后将所有后面的数置零即可。

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int index = 0;
        for(int i = 0;i < nums.size();i++){
            if(nums[i] != 0){
                nums[index++] = nums[i];
            }
        }
        for(int i = index;i < nums.size();i++)
            nums[i] = 0;
    }
};

解题思路二

思路二来自题解区点这里
类似于快速排序的方法,只用一次遍历,极大减少了代码

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        for(int i = 0,j = 0;i < nums.size();i++){
            if(nums[i] != 0){
                if(i > j)
                    swap(nums[i],nums[j]);
                j++;
            }
        }
    }
};

本文链接: http://www.dtmao.cc/news_show_450094.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?