赞
踩
使用 双指针 来解题:
此处的双指针,其实只是定义两个变量。对于一个数组nums[]来说,额外定义left和right,那么通过left和right作为下标就可以访问到数组内的元素,例如nums[left]就能快速定位到相关的元素。
具体思路:
通过两个指针把数组划分为了 [0,left],[left+1,right-1],[right,n-1]。其中n是数组的长度,n-1就是数组最后一个数字的下标。
于是两个指针把数组分成了三个部分:
[0,left]和[left+1,right-1]代表的是已经处理过的区间,前者是非0数,后者是0
[right,n-1]就代表还没有开始处理的区间
用到双指针,就需要知道两个指针分别的作用是什么:
left 的作用是:已经处理的区间内,非0元素的最后一个位置
right的作用是:遍历整个数组,right之前的数组是已经处理过的,right及之后的数组是没有处理过的
具体操作:
代码就很好处理了:
- public void moveZeroes(int[] nums) {
- for(int left = -1 , right = 0 ; right < nums.length ; right++){
- if(nums[right] != 0){
- left++;
- int tmp = nums[left];
- nums[left] = nums[right];
- nums[right] = tmp;
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。