1、移动零(283)
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
//思路一:
//1、引入另外一个指针k,用于指向数组中非0元素(原有一个遍历数组的指针i),很显然k <= nums.length-1
//2、[0,k)中元素是非0元素,i指向非0元素,就与k指向的元素交换,这样保证元素的相对顺序
public void moveZeroes(int[] nums) {
int k = 0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
swap(nums,k++,i);
}
}
}
private void swap(int[] nums,int i,int j){
int tmp = nums[i];
nums[i] = nums [j];
nums[j] = tmp;
}
//思路二:是对思路一的改进
public void moveZeroes(int[] nums) {
int k = 0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=0){
if(i != k){
swap(nums,k++,i);
}else{
k++;
}
}
}
}
private void swap(int[] nums,int i,int j){
int tmp = nums[i];
nums[i] = nums [j];
nums[j] = tmp;
}
参考:
标签:12,nums,int,数组,283,移动 From: https://www.cnblogs.com/i9code/p/17998182