LeetCode题解:Move Zeroes
来源:互联网 发布:c语言实验转换字母 编辑:程序博客网 时间:2024/05/21 14:57
题目链接:
Move Zeroes
题目描述:
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、3、12三个元素提到数组的第1、2、3位置,其他0元素放在12之后。这个题目还有空间复杂度的要求:O(1),所以咱们不能复制整个数组再进行挑选操作了。
解题方案:
由题意我们可以知道,这个题目想做的是:将非零元素挑选出来按原来顺序置前,零元素置后,0元素之间其实是没有区别的,即0元素顺序无所谓。那么我们可以用一个变量pos在存储新的数组中元素的位置,从数组0索引开始,先处理非零元素,处理完毕后,直接将此时pos索引之后到numsSize的值全部赋为0即可。
还有一点:我们移动元素的操作可以直接在数组自身上处理,不用担心覆盖原本的元素,因为我们是从数组0索引开始遍历的元素,要覆盖的元素(不管是0还是非0元素)都已经先行一步被赋值到了对应位置。
———-C
好,下面我们来看一下AC的代码:
void moveZeroes(int* nums, int numsSize) { int pos = 0; for(int i = 0; i < numsSize; ++i){ //nums[] if(nums[i]){ nums[pos++] = nums[i]; } } for(int i = pos; i < numsSize; ++i){ nums[i] = 0; }}
- LeetCode题解:Move Zeroes
- LeetCode题解:Move Zeroes
- LeetCode 题解(214) : Move Zeroes
- Leetcode题解 283. Move Zeroes
- LeetCode 283 Move Zeroes题解
- leetcode题解-283. Move Zeroes
- LeetCode 283. Move Zeroes 题解(C++)
- leetcode 283: Move Zeroes
- leetcode - Move Zeroes
- Leetcode: Move Zeroes
- LeetCode - Move Zeroes
- LeetCode-Move Zeroes
- [LeetCode]Move Zeroes
- leetcode-283-Move Zeroes
- [leetcode 283]Move Zeroes
- LeetCode---Move Zeroes
- LeetCode 283----Move Zeroes
- LeetCode Move Zeroes
- 安装配置meavn
- 花了很长时间看完了 java编程思想
- 线性表实验
- android中的MVP模式
- 笔试题5. 将student a am i转化为i am a student
- LeetCode题解:Move Zeroes
- 安装Linux系统时默认
- 算法启蒙
- Android的ADT不能自动生成R.java
- 在浏览器中预览“首选参数中指定的浏览器位置已经不存在。请确认”首选参数“指向正确的文件
- HDOJ-2054(大数比较)(A == B ?)
- 可变参数宏 __VA_ARGS__
- 递归
- iOS多线程总结