博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 283 Move Zeroes(移动所有的零元素)
阅读量:6243 次
发布时间:2019-06-22

本文共 1868 字,大约阅读时间需要 6 分钟。

版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50409676

翻译

给定一个数字数组,写一个方法将所有的“0”移动到数组尾部,同时保持其余非零元素的相对位置不变。例如,给定nums = [0, 1, 0, 3, 12],在调用你的函数之后,nums应该变为[1, 3, 12, 0, 0]。备注:你必须就地完成,不得复制该数组。最小化总共的操作数。
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].Note:You must do this in-place without making a copy of the array.Minimize the total number of operations.

分析

一开始我还以为是要给非零元素排序呢,后来仔细一看只是保持相对位置不变就好了。那就容易很多了呀。

0 1 0 3 12 (index = 0, current = 0)1 0 0 3 12 (index = 1, current = 1)1 0 0 3 12 (index = 1, current = 2)1 3 0 0 12 (index = 2, current = 3)1 3 12 0 0 (index = 3, current = 4)

按上面的步骤来,当前的数字是0的话不做操作,非零的话将其与第一个零互换位置。

其核心在于这个第一个零的位置是如何变化的,即便一开始不是0也没关系,大不了让这个非零数和自己交换位置呗,比如说:

1 2 0 3 12 (index = 0, current = 0)1 2 0 3 12 (index = 1, current = 1)1 2 0 3 12 (index = 2, current = 2)1 2 3 0 12 (index = 3, current = 3)1 2 3 12 0 (index = 4, current = 4)

翻译成代码就是:

#include 
#include
using namespace std;void moveZeroes(vector
& nums) { for (int index = 0, current = 0; current < nums.size(); current++) { if (nums[current] != 0) swap(nums[index++], nums[current]); }}int main() { vector
v; v.push_back(1); v.push_back(2); v.push_back(0); v.push_back(3); v.push_back(12); moveZeroes(v); for (auto i : v) { cout << i << " "; } return 0;}

代码

class Solution {public:    void moveZeroes(vector
& nums) { for (int index = 0, current = 0; current < nums.size(); current++) { if (nums[current] != 0) swap(nums[index++], nums[current]); } }};
你可能感兴趣的文章
每周聚划算 超值软件汇总:云市场迎新年大礼包 专场五折封顶劲省2100元
查看>>
【区块链之技术进阶】扒一扒某乎上面对于区块链的理解(二)
查看>>
如何从PostgreSQL源码分析哪些操作需要超级用户权限 - 阿里云rds superuser提供了哪些权限...
查看>>
用java进行面向对象编程,面向对象是什么意思
查看>>
博拉科技浅谈中国企业的智能制造之路
查看>>
[LeetCode]--29. Divide Two Integers
查看>>
php如何获取原生请求体
查看>>
java web开发 高并发处理
查看>>
PHP 高级编程之多线程(二)
查看>>
ART世界探险(12) - OAT文件分析(2) - ELF文件头分析(中)
查看>>
AFNetworking 和 ASIHTTPRequest
查看>>
Qt之自定义界面(实现无边框、可移动)
查看>>
MS SQL修改数据库名称
查看>>
【RMAN】使用RMAN duplicate复制同机数据库
查看>>
概率论快速学习03:概率公理补充
查看>>
C++ 对象的内存布局(上)
查看>>
向Java开发者介绍Scala
查看>>
【软考点点】计算机基础知识
查看>>
hdu2066一个人的旅行(多源点多汇点的最短路径问题)
查看>>
老猪带你玩转android自定义控件一——打造最简单viewpagerindicator
查看>>