📌  相关文章
📜  将所有零移动到随机整数数组的开头和结尾

📅  最后修改于: 2021-04-29 17:03:09             🧑  作者: Mango

给定一个随机整数数组arr [] ,任务是将数组中的所有零推到数组的开头,将所有零推到数组的结尾。请注意,所有其他元素的顺序应相同。

例子:

方法:从左到右遍历数组,并在开头移动所有不等于1的元素,然后在数组的末尾将1放在其余的索引中。现在,找到不等于1的最后一个元素的索引,然后说lastInd ,然后从该索引开始到数组的开头,将所有不等于0的元素最后推到lastInd ,然后将0放入开始。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Utility function to print
// the contenets of an array
void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}
  
// Function that pushes all the zeros
// to the start and ones to the end of an array
void pushBinaryToBorder(int arr[], int n)
{
  
    // To store the count of elements
    // which are not equal to 1
    int count1 = 0;
  
    // Traverse the array and calculate
    // count of elements which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
  
    // Now all non-ones elements have been shifted to
    // front and 'count1' is set as index of first 1.
    // Make all elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
  
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
  
    // Traverse the array and pull non-zero
    // elements to the required indices
    for (int i = n - 1; i >= 0; i--) {
  
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        if (!lastNonOne) {
  
            // Mark the position Of
            // last NonBinary integer
            lastNonOne = i;
        }
  
        // Place non-zero element to
        // their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
  
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
  
// Driver code
int main()
{
    int arr[] = { 1, 2, 0, 0, 0, 3, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
  
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
  
class GFG
{
  
// Utility function to print
// the contenets of an array
static void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        System.out.print(arr[i]+" ");
}
  
// Function that pushes all the zeros
// to the start and ones to the end of an array
static void pushBinaryToBorder(int arr[], int n)
{
  
    // To store the count of elements
    // which are not equal to 1
    int count1 = 0;
  
    // Traverse the array and calculate
    // count of elements which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
  
    // Now all non-ones elements have been shifted to
    // front and 'count1' is set as index of first 1.
    // Make all elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
  
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
  
    // Traverse the array and pull non-zero
    // elements to the required indices
    for (int i = n - 1; i >= 0; i--) 
    {
  
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        if (lastNonOne == 0)
        {
  
            // Mark the position Of
            // last NonBinary integer
            lastNonOne = i;
        }
  
        // Place non-zero element to
        // their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
  
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
  
// Driver code
public static void main(String args[])
{
    int arr[] = { 1, 2, 0, 0, 0, 3, 6 };
    int n = arr.length;
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
  
}
}
  
// This code is contributed by SURENDRA_GANGWAR.


Python3
# Python3 implementation of the approach 
  
# Utility function to print 
# the contenets of an array 
def printArr(arr, n) : 
  
    for i in range(n) :
        print(arr[i],end=" ") 
  
  
# Function that pushes all the zeros 
# to the start and ones to the end of an array 
def pushBinaryToBorder(arr, n) : 
  
    # To store the count of elements 
    # which are not equal to 1 
    count1 = 0
      
    # Traverse the array and calculate 
    # count of elements which are not 1 
    for i in range(n) :
        if (arr[i] != 1) :
            arr[count1] = arr[i]
            count1 += 1
  
    # Now all non-ones elements have been shifted to 
    # front and 'count1' is set as index of first 1. 
    # Make all elements 1 from count to end. 
    while (count1 < n) :
        arr[count1] = 1
        count1 += 1
  
    # Initialize lastNonBinary position to zero 
    lastNonOne = 0
  
    # Traverse the array and pull non-zero 
    # elements to the required indices 
    for i in range(n - 1, -1, -1) :
  
        # Ignore the 1's 
        if (arr[i] == 1) : 
            continue
              
        if (not lastNonOne) :
  
            # Mark the position Of 
            # last NonBinary integer 
            lastNonOne = i
  
        # Place non-zero element to 
        # their required indices 
        if (arr[i] != 0) :
            arr[lastNonOne] = arr[i]
            lastNonOne -= 1
  
    # Put zeros to start of array 
    while (lastNonOne >= 0) :
        arr[lastNonOne] = 0
        lastNonOne -= 1
  
# Driver code 
if __name__ == "__main__" :
      
    arr = [ 1, 2, 0, 0, 0, 3, 6 ]; 
    n = len(arr); 
    pushBinaryToBorder(arr, n) 
    printArr(arr, n)
  
# This code is contributed by Ryuga


C#
// C# implementation of the approach
using System;
  
class GFG
{
  
// Utility function to print
// the contenets of an array
static void printArr(int []arr, int n)
{
    for (int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
  
// Function that pushes all the zeros
// to the start and ones to the end of an array
static void pushBinaryToBorder(int [] arr, int n)
{
  
    // To store the count of elements
    // which are not equal to 1
    int count1 = 0;
  
    // Traverse the array and calculate
    // count of elements which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
  
    // Now all non-ones elements have been shifted to
    // front and 'count1' is set as index of first 1.
    // Make all elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
  
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
  
    // Traverse the array and pull non-zero
    // elements to the required indices
    for (int i = n - 1; i >= 0; i--) 
    {
  
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        if (lastNonOne == 0)
        {
  
            // Mark the position Of
            // last NonBinary integer
            lastNonOne = i;
        }
  
        // Place non-zero element to
        // their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
  
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
  
// Driver code
public static void Main()
{
    int []arr = { 1, 2, 0, 0, 0, 3, 6 };
    int n = arr.Length;
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
}
}
  
// This code is contributed by Mohit kumar 29.


输出:
0 0 0 2 3 6 1