企业网站网络营销,计算机网络网站开发,公司网站制作公司排名,济南网站排名推广力扣#xff08;LeetCode#xff09;. - 备战技术面试#xff1f;力扣提供海量技术面试资源#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/move-zeroes/
使用 双指针 来解题#xff1a;
此处的双指针#xff0c;…力扣LeetCode. - 备战技术面试力扣提供海量技术面试资源帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/move-zeroes/
使用 双指针 来解题
此处的双指针其实只是定义两个变量。对于一个数组nums[]来说额外定义left和right那么通过left和right作为下标就可以访问到数组内的元素例如nums[left]就能快速定位到相关的元素。
具体思路
通过两个指针把数组划分为了 [0left][left1right-1][rightn-1]。其中n是数组的长度n-1就是数组最后一个数字的下标。
于是两个指针把数组分成了三个部分
[0left]和[left1right-1]代表的是已经处理过的区间前者是非0数后者是0
[rightn-1]就代表还没有开始处理的区间 用到双指针就需要知道两个指针分别的作用是什么
left 的作用是已经处理的区间内非0元素的最后一个位置
right的作用是遍历整个数组right之前的数组是已经处理过的right及之后的数组是没有处理过的
具体操作
定义两个指针分别为left和rightleft在数组的-1元素位置right在数组的0元素位置right遍历数组遇到0就遇到非0元素则让left1这个元素和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;}}}