Move Zeroes
Posted YuriFLAG
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Move Zeroes相关的知识,希望对你有一定的参考价值。
Given an array nums
, write a function to move all 0
‘s to the end of it while maintaining the relative order of the non-zero elements.
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
要求在O(n) 的时间复杂完成。不需要额外的空间。
思路:从头遍历数组找到第一个为0的元素,纪录其下标为i. 在i的右边找到第一个不为0的元素记录其下标为j。交换nums[i] 与 nums[j]. 从j + 1 开始继续寻找不为0的元素,当j等于数组的长度时,表明0的元素都移动到了数组的尾部。
注意 交换了之后 i + 1 ~ j 之间的元素一定都是0的元素。
1 public class Solution { 2 /** 3 * @param nums an integer array 4 * @return nothing, do this in-place 5 */ 6 public void moveZeroes(int[] nums) { 7 if (nums == null || nums.length == 0 || nums.length == 1) { 8 return; 9 } 10 int i = 0; 11 for (i = 0; i < nums.length; i++) { 12 if (nums[i] == 0) { 13 break; 14 } 15 } 16 if (i == nums.length) { 17 return; 18 } 19 20 for (int j = i + 1; j < nums.length; j++) { 21 if (nums[j] != 0) { 22 int temp = nums[i]; 23 nums[i] = nums[j]; 24 nums[j] = temp; 25 i = i + 1; 26 } 27 } 28 return; 29 } 30 31 }
以上是关于Move Zeroes的主要内容,如果未能解决你的问题,请参考以下文章