博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 283 Move Zeros
阅读量:7154 次
发布时间:2019-06-29

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

Problem:

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].

1. You must do this in-place without making a copy of the array.

2. Minimize the total number of operations.

Summary:

在不复制数组的情况下,将整型数组中的所有0移至数组末尾,其他数相对位置不变。

尽可能减少操作数。

Analysis:

1. 常规方法:用两个指针,其中一个指针向后扫,每找到一个非零元素则与前面指针内容互换。

1 class Solution { 2 public: 3     void moveZeroes(vector
& nums) { 4 int len = nums.size(), k = 0; 5 6 for (int i = 0; i < len; i++) { 7 if (nums[i] != 0) { 8 swap(nums[i], nums[k++]); 9 }10 }11 12 return;13 }14 };

但由于交换操作过多,导致效率不高。

2. 同样两个指针,其中一个指针向后扫,每找到一个非零元素则按顺序从数组头往后放,另一个指针记录当前放置位置。

  第一个指针扫完时,将第二个指针到数组末尾全部填0即可。

1 class Solution { 2 public: 3     void moveZeroes(vector
& nums) { 4 int len = nums.size(), k = 0; 5 6 for (int i = 0; i < len; i++) { 7 if (nums[i] != 0) { 8 nums[k++] = nums[i]; 9 }10 }11 12 while (k < len) {13 nums[k++] = 0;14 }15 16 return;17 }18 };

 

转载于:https://www.cnblogs.com/VickyWang/p/5999832.html

你可能感兴趣的文章
ECSHOP首页调取固定的某个分类
查看>>
用Gvim建立IDE编程环境 (Windows篇)_Nothing is impossible for a willing heart._百度空间...
查看>>
oracle for update和for update nowait的区别
查看>>
poj 1386 Play on Words
查看>>
到了最后出现败笔
查看>>
用VS自带的dotfuscator.exe对exe或dll进行简单加密 以保护程序源码
查看>>
Chrome 插件
查看>>
iptables 1.4.17 发布,Linux防火墙
查看>>
sed 与 awk
查看>>
《Effective C#》读书笔记——条目24:用委托实现回调<使用C#表达设计>
查看>>
远程连接 sql2005
查看>>
JS倒计时代码
查看>>
Web.config总结
查看>>
c++的重载,覆盖与隐藏
查看>>
35种神奇的心理效应
查看>>
memcached查看和清理
查看>>
AD身份验证时,系统使用的属性
查看>>
myeclipse连接数据库
查看>>
重部署与热部署杂记
查看>>
C++中#if #ifdef 的作用
查看>>