移动零

1、移动零(283)

283. Move Zeroes (Easy)

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。
//思路一:
//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;
}

参考:

posted @ 2024-01-30 23:00  行行行行星  阅读(14)  评论(0)    收藏  举报