283. 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.
思考:开始想通过两层for循环,外层判断是否为0,内存将0用0之后的数字填补;再加一个循环,将被最后一位数字代替的0还原。
错误:忽略了同时出现两次0的可能性,忽略了结尾同时有两个相同数字的可能性。
package com.wang.test; /* * @tittle:283. Move Zeroes * @auther:wwwglin * @time:2016/04/14 */ public class MoveZeroes { public void moveZeroes(int[] nums) { // 将非零元素前移,数组最后填充最后一个非0数字 for (int i = 0; i < nums.length; i++) { if (nums[i] == 0) { for (int j = i ; j < nums.length-1; j++) { nums[j] = nums[j +1 ]; } } } // 将填充数字替换为0 for (int i = nums.length - 1; i > 0; i--) { if (nums[i] != nums[i - 1]) { break; } nums[i] = 0; } return; } public static void main(String[] args) { int[] nums = { 0, 0, 1 }; System.out.print("old: "); for (int i : nums) { System.out.print(i + ","); } System.out.println(); System.out.print("new: "); new MoveZeroes().moveZeroes(nums); for (int i : nums) { System.out.print(i + ","); } } }
改进:加一个判断,判断替换后本位是否还是0,如果是,重复执行。加一个变量,查看0出现次数。
public void moveZeroes(int[] nums) { // 将非零元素前移,数组最后填充最后一个非0数字 int count = 0; for (int i = 0; i < nums.length; i++) { while (nums[i] == 0) { for (int j = i; j < nums.length - 1; j++) { nums[j] = nums[j + 1]; } count++; } } // 将填充数字替换为0for (int i = 1; i <= count; i++) { nums[nums.length - i] = 0; } }
学习:注意while循环的使用。
但是当我提交的时候提示超时-。-,看来还需要改进。
解决:尝试转换为list进行解决,超时-。-
最后百度解决-。-,然后学学把,差距还是很大的。。。
package com.wang.test; import java.util.ArrayList; import java.util.List; /* * @tittle:283. Move Zeroes * @auther:wwwglin * @time:2016/04/14 */ public class MoveZeroes { public void moveZeroes(int[] nums) { int i=0; int j=0; while(j<nums.length) { if(nums[j]!=0) { if(j!=i) { nums[i++] = nums[j]; nums[j] = 0; } else { ++i; } } ++j; } } public static void main(String[] args) { int[] nums = { 0, 0, 1 }; System.out.print("old: "); for (int i : nums) { System.out.print(i + ","); } System.out.println(); System.out.print("new: "); new MoveZeroes().moveZeroes(nums); for (int i : nums) { System.out.print(i + ","); } } }
来源:http://blog.csdn.net/xudli/article/details/48574521

浙公网安备 33010602011771号