码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 283 Move Zeroes

时间:2017-11-11 11:29:32      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:数组   tor   开始   依次   下标   个数   很多   blog   class   

是道容易题,可以想到很多解法,但有些解法容易出小错误:

1)交换法:

用一个指针p保存零元素起始位置。遍历数组,当发现是非零元素,则和前面的零元素交换,同时p自增一。

这个方法有几个地方容易想错,首先p的初始值怎么定义,如果你把p定义为第一个零元素的下标,则刚开始p你可能会定义为-1,因为你不知道第一个元素是否为零。

但其实p的初值可以为0,当第一个元素为0时自然没错,当第一个元素为非零时,相当于自己和自己交换,也不会错。但这样处理,程序会显得很简洁。

2)整体移动法:

这个方法思路更简单,更不易出错。遍历数组,将所有非零的数依次往前移动,直到移到最后一个数为止。最后将末尾的部分全部赋值0。

 1 //交换法    
 2 void moveZeroes(vector<int>& nums) {
 3        int j = 0;
 4        for(int i=0; i<nums.size(); i++){
 5            if(nums[i] != 0){
 6                swap(nums[i], nums[j++]);
 7            }
 8        }
 9     }
10 
11 //整体移动法
12 void moveZeroes(vector<int>& nums) {
13         int left = 0, right = 0, sz = nums.size();
14         for(right = 0; right < sz; right++){
15             if(nums[right] != 0){
16                 nums[left++] = nums[right];
17             }
18         }
19         while(left < sz)
20             nums[left++] = 0;
21     }

 

LeetCode 283 Move Zeroes

标签:数组   tor   开始   依次   下标   个数   很多   blog   class   

原文地址:http://www.cnblogs.com/naturesound/p/7817988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!