给定一个随机数数组,将给定数组的所有零推到该数组的末尾。例如,如果给定的数组为{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}
方法:
- 将数组从0迭代到N。
- 保留两个指针,一个指向零个元素,另一个指向非零个元素。
- 将每个零元素与紧随其后的非零元素交换。
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)
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。