📌  相关文章
📜  使用两指针将所有零移动到数组的末尾

📅  最后修改于: 2021-05-17 01:52:57             🧑  作者: Mango

给定一个随机数数组,将给定数组的所有零推到该数组的末尾。例如,如果给定的数组为{1、0、2、6、0、4},则应将其更改为{1、2、6、4、0、0}。所有其他元素的顺序应相同。

例子:

Input: arr[]={8, 9, 0, 1, 2, 0, 3}
Output: arr[]={8, 9, 1, 2, 3, 0, 0}
Explanation: 
Swap {0 ,1} -> Resulting array {8, 9, 1, 0, 2, 0, 3}
Swap {0 ,2} -> Resulting array {8, 9, 1, 2, 0, 0, 3}
Swap {0 ,3} -> Final array {8, 9, 1, 2, 3, 0, 0}

Input: arr[]={4, 5, 0, 0, 0, 0, 6, 7}
Output: arr[]={4, 5, 6, 7, 0, 0, 0, 0}

方法:

  1. 将数组从0迭代到N。
  2. 保留两个指针,一个指向零个元素,另一个指向非零个元素。
  3. 将每个零元素与紧随其后的非零元素交换。
C
// C implementation to move all zeroes at 
// the end of array 
#include
  
// Function to move all zeroes at 
// the end of array 
void moveZerosToEnd(int arr[], int n) 
{ 
    int j=0, temp, i;
      
    // Traverse the array. If arr[i] is
    // non-zero and arr[j] is zero, 
    // then swap both the element
    for(i=0;i


C++
// C++ implementation to move all zeroes at 
// the end of array 
#include  
using namespace std; 
  
// Function to move all zeroes at 
// the end of array 
void moveZerosToEnd(int arr[], int n) 
{ 
    int j=0, temp, i;
      
    // Traverse the array. If arr[i] is
    // non-zero and arr[j] is zero, 
    // then swap both the element
    for(i=0;i


Java
// Java implementation to move all zeroes at 
// the end of array 
  
class GFG {
  
    // Function to move all zeroes at
    // the end of array
    static void moveZerosToEnd(int arr[], int n) {
        int j = 0, i;
  
        // Traverse the array. If arr[i] is
        // non-zero and arr[j] is zero,
        // then swap both the element
        for (i = 0; i < n; i++) {
            if (arr[i] != 0 && arr[j] == 0) {
                arr = swap(arr, i, j);
            }
            if (arr[j] != 0)
                j += 1;
        }
    }
  
    static int[] swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        return arr;
    }
  
    // Function to print the array elements
    static void printArray(int arr[], int n) {
        for (int i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
    }
  
    // Driver Code
    public static void main(String[] args) 
    {
        int arr[] = { 8, 9, 0, 1, 2, 0, 3 };
        int n = arr.length;
  
        System.out.print("Original array: ");
        printArray(arr, n);
  
        moveZerosToEnd(arr, n);
  
        System.out.print("\nModified array: ");
        printArray(arr, n);
  
    }
}
  
// This code is contributed by 29AjayKumar


Python3
# Python3 implementation to move all zeroes at 
# the end of array 
  
# Function to move all zeroes at 
# the end of array 
def moveZerosToEnd(nums):
    j = 0
      
    for i in range(len(nums)):
        if nums[i]!= 0 and nums[j]== 0:
            nums[i], nums[j]= nums[j], nums[i]
        if nums[j]!= 0:
            j+= 1
      
  
  
# Function to print the array elements 
def printArray(arr, n): 
  
    for i in range(0, n): 
        print(arr[i],end=" ") 
  
  
# Driver program to test above 
arr = [8, 9, 0, 1, 2, 0, 3]
n = len(arr) 
  
print("Original array:", end=" ") 
printArray(arr, n) 
  
moveZerosToEnd(arr) 
  
print("\nModified array: ", end=" ") 
printArray(arr, n)


C#
// C# implementation to move all zeroes 
// at the end of array 
using System;
  
class GFG{
  
// Function to move all zeroes 
// at the end of array
static void moveZerosToEnd(int []arr, int n)
{
    int j = 0, i;
  
    // Traverse the array. If arr[i] 
    // is non-zero and arr[j] is zero,
    // then swap both the element
    for(i = 0; i < n; i++)
    {
       if (arr[i] != 0 && arr[j] == 0)
       {
           arr = swap(arr, i, j);
       }
       if (arr[j] != 0)
           j += 1;
    }
}
  
static int[] swap(int[] arr, int i, int j) 
{
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    return arr;
}
  
// Function to print the array elements
static void printArray(int []arr, int n)
{
    for(int i = 0; i < n; i++)
       Console.Write(arr[i] + " ");
}
  
// Driver Code
public static void Main(String[] args) 
{
    int []arr = { 8, 9, 0, 1, 2, 0, 3 };
    int n = arr.Length;
  
    Console.Write("Original array: ");
    printArray(arr, n);
  
    moveZerosToEnd(arr, n);
  
    Console.Write("\nModified array: ");
    printArray(arr, n);
}
}
  
// This code is contributed by 29AjayKumar


输出:
Original array: 8 9 0 1 2 0 3 
Modified array: 8 9 1 2 3 0 0

时间复杂度: O(N)。
辅助空间: O(1)