【LeetCode-283】Move Zeroes(C++)
2015-11-16 18:17
197 查看
题目要求:
给出一个数组,要求写一个函数把数组中所有的0全部挪到数组的最后面,同时保持数组中非0元素的顺序不变。比如给出一个数组nums=[0,1,0,3,12]。调用函数之后nums变为[1,3,12,0,0]。
注意:要在原数组上完成元素的移动,不能进行数组的复制。使总的操作次数最小。
解题思路:
首先要遍历一次数组,用一个vector容器记录下元素为0的位置。然后用两个for循环完成对0元素的删除和移动。最后在用一个for循环把数组后n位置0(其中n为0元素的个数)
程序实现:
总结:
一开始提交的时候显示runtime error 一直找不到问题,后来搜了一下说runtime error 很可能是内存错误。然后检查了一下发现忽略了数组中不含0元素的情况。如果数组中不含0元素,那么position.size()应该为0,访问position[positon.size()-1]的时候自然会出现内存错误。
感觉这个题目并没有让我学到什么东西,只不过是简单的位置移动,不过加强了对vector的理解。
给出一个数组,要求写一个函数把数组中所有的0全部挪到数组的最后面,同时保持数组中非0元素的顺序不变。比如给出一个数组nums=[0,1,0,3,12]。调用函数之后nums变为[1,3,12,0,0]。
注意:要在原数组上完成元素的移动,不能进行数组的复制。使总的操作次数最小。
解题思路:
首先要遍历一次数组,用一个vector容器记录下元素为0的位置。然后用两个for循环完成对0元素的删除和移动。最后在用一个for循环把数组后n位置0(其中n为0元素的个数)
程序实现:
class Solution{ public: void moveZeroes(vector<int>& nums){ vector<int>position; for(int i=0;i<nums.size();i++){ if(nums[i]==0) position.push_back(i); }//将所有0元素的位置存储在position里面 if(position.size()!=0){//如果数组中不含0元素,则什么都不做。 int n=position.size()-1; int g=nums.size()-1; for(int i=n;i>=0;i--){ for(int j=position[i];j<g;j++){ nums[j]=nums[j+1]; } }//覆盖0元素。 for(int i=nums.size()-position.size();i<nums.size();i++){ nums[i]=0; }//将数组后nums.size()-position.size()位置0 } } };
总结:
一开始提交的时候显示runtime error 一直找不到问题,后来搜了一下说runtime error 很可能是内存错误。然后检查了一下发现忽略了数组中不含0元素的情况。如果数组中不含0元素,那么position.size()应该为0,访问position[positon.size()-1]的时候自然会出现内存错误。
感觉这个题目并没有让我学到什么东西,只不过是简单的位置移动,不过加强了对vector的理解。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性
- C++ Custom Control控件向父窗体发送对应的消息