江苏做网站的企业,有限公司破产无力偿还债务怎么办,精准营销的案例,百度广告联盟怎么加入一#xff0c;题目要求#xff1a; 给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素的相对顺序。 请注意 #xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0…一题目要求 给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。 请注意 必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出: [0] 提示: 1 nums.length 104 -231 nums[i] 231 - 1
二 算法原理
定义两个指针 cur从左向右扫描数组遍历数组dest指向处理区间内非0元素的最后一个元素 将数组分成三个部分 【0dest】非0元素【dest1cur-1】0元素【curn-1】待处理 cur从左向右遍历保持这三部分的状态不变当遍历结束时即完成非0元素与0元素的划分。 cur 遇到0元素 cur cur 遇到非0元素 非0元素部分长度1并把cur当前所指的这个非0元素添加到这个新增的这个位置即swapdest1cur。
三 代码实现
public void moveZeroes(int[] nums) {// 遍历之前非0元素部分长度为0所以dest -1for(int cur 0,dest -1;cur nums.length;cur ) {if(nums[nums] ! 0) {dest ; // 非0元素部分长度1// 交换新增位置处的0 和 cur当前指向的值int tmp nums[cur];nums[cur] nums[dest];nums[dest] tmp;}}
}