zoukankan      html  css  js  c++  java
  • LeetCode_283. Move Zeroes

    283. Move Zeroes

    Easy

    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.

    Example:

    Input: [0,1,0,3,12]
    Output: [1,3,12,0,0]

    Note:

    1. You must do this in-place without making a copy of the array.
    2. Minimize the total number of operations.
    package leetcode.easy;
    
    public class MoveZeroes {
    	public void moveZeroes1(int[] nums) {
    		int n = nums.length;
    
    		// Count the zeroes
    		int numZeroes = 0;
    		for (int i = 0; i < n; i++) {
    			if (nums[i] == 0) {
    				numZeroes++;
    			}
    		}
    
    		// Make all the non-zero elements retain their original order.
    		java.util.ArrayList<Integer> ans = new java.util.ArrayList<Integer>();
    		for (int i = 0; i < n; i++) {
    			if (nums[i] != 0) {
    				ans.add(nums[i]);
    			}
    		}
    
    		// Move all zeroes to the end
    		while (numZeroes > 0) {
    			ans.add(0);
    			numZeroes--;
    		}
    
    		// Combine the result
    		for (int i = 0; i < n; i++) {
    			nums[i] = ans.get(i);
    		}
    	}
    
    	public void moveZeroes2(int[] nums) {
    		int lastNonZeroFoundAt = 0;
    		// If the current element is not 0, then we need to
    		// append it just in front of last non 0 element we found.
    		for (int i = 0; i < nums.length; i++) {
    			if (nums[i] != 0) {
    				nums[lastNonZeroFoundAt++] = nums[i];
    			}
    		}
    		// After we have finished processing new elements,
    		// all the non-zero elements are already at beginning of array.
    		// We just need to fill remaining array with 0's.
    		for (int i = lastNonZeroFoundAt; i < nums.length; i++) {
    			nums[i] = 0;
    		}
    	}
    
    	public void moveZeroes3(int[] nums) {
    		for (int lastNonZeroFoundAt = 0, cur = 0; cur < nums.length; cur++) {
    			if (nums[cur] != 0) {
    				int temp = nums[lastNonZeroFoundAt];
    				nums[lastNonZeroFoundAt] = nums[cur];
    				nums[cur] = temp;
    				lastNonZeroFoundAt++;
    			}
    		}
    	}
    
    	private void print_arr(int[] array) {
    		for (int i = 0; i < array.length; i++) {
    			System.out.print(array[i] + " ");
    		}
    		System.out.println();
    	}
    
    	@org.junit.Test
    	public void test1() {
    		int[] nums = { 0, 1, 0, 3, 12 };
    		print_arr(nums);
    		moveZeroes1(nums);
    		print_arr(nums);
    	}
    
    	@org.junit.Test
    	public void test2() {
    		int[] nums = { 0, 1, 0, 3, 12 };
    		print_arr(nums);
    		moveZeroes2(nums);
    		print_arr(nums);
    	}
    
    	@org.junit.Test
    	public void test3() {
    		int[] nums = { 0, 1, 0, 3, 12 };
    		print_arr(nums);
    		moveZeroes3(nums);
    		print_arr(nums);
    	}
    }
    
  • 相关阅读:
    并行编译 Xoreax IncrediBuild
    FreeImage使用
    wxWidgets简单的多线程
    wx菜单栏
    #你好Unity3D#Hierarchy视图监听gameObject点击事件
    #你好Unity3D#Project脚本执行双击资源操作
    Unity3D研究院编辑器之Editor的GUI的事件拦截
    Unity3D研究院编辑器之脚本设置ToolBar
    Unity3D研究院编辑器之不影响原有布局拓展Inspector
    Unity3D研究院之Editor下监听Transform变化
  • 原文地址:https://www.cnblogs.com/denggelin/p/11776936.html
Copyright © 2011-2022 走看看