leetcode之move zeros
2016-01-19 19:59
183 查看
题目:
Given an array
to the end of it while maintaining the relative order of the non-zero elements.
For example, given
be
解答:
可以先用几个例子来模拟操作,假设i为0部分的头
可以发现只需要将i位置和当前出现的非0的位置进行交换,然后将i++即可
如例子 [1,2,3,0,5]
初始化i为0,发现1非0,将i和0位置的交换,然后i++,以此类推到达和3交换完以后,i变为3,遇见0,跳过,然后遇见5,将5和位置3进行交换,就得到了最终结果
而且不可能出现015,此时在处理5但是i等于0的情况,也就是说当前处理的位置和0部分的起点之间一定已经全部都是0
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int size = nums.size();
int zero_start = 0;
for(int i = 0;i < size; ++i)
{
if(nums[i] == 0)
continue;
else
{
int tmp = nums[i];
nums[i] = nums[zero_start];
nums[zero_start] = tmp;
zero_start++;
}
}
}
};
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,
numsshould
be
[1, 3, 12, 0, 0].
解答:
可以先用几个例子来模拟操作,假设i为0部分的头
可以发现只需要将i位置和当前出现的非0的位置进行交换,然后将i++即可
如例子 [1,2,3,0,5]
初始化i为0,发现1非0,将i和0位置的交换,然后i++,以此类推到达和3交换完以后,i变为3,遇见0,跳过,然后遇见5,将5和位置3进行交换,就得到了最终结果
而且不可能出现015,此时在处理5但是i等于0的情况,也就是说当前处理的位置和0部分的起点之间一定已经全部都是0
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int size = nums.size();
int zero_start = 0;
for(int i = 0;i < size; ++i)
{
if(nums[i] == 0)
continue;
else
{
int tmp = nums[i];
nums[i] = nums[zero_start];
nums[zero_start] = tmp;
zero_start++;
}
}
}
};
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总