本文概述
- C ++
- Java
- Python3
- C#
例子:
Input : arr[] = {2, 2, 0, 4, 0, 8}
Output : 4 4 8 0 0 0Input : arr[] = {0, 2, 2, 2, 0, 6, 6, 0, 0, 8}
Output :4 2 12 8 0 0 0 0 0 0
资源: Microsoft IDC面试体验|S150。
方法:首先按照上述说明修改数组, 即, 如果下一个有效数字与当前数字相同, 则将其值加倍, 然后将下一个数字替换为0。
修改算法:
1. if n == 1
2.return
3. for i = 0 to n-2
4.if (arr[i] != 0) &
&
(arr[i] == arr[i+1])
5.arr[i] = 2 * arr[i]
6.arr[i+1] = 0
7.i++
修改数组后, 将所有零移动到数组的末尾.
C ++
// C++ implementation to rearrange the array
// elements after modification
#include <
bits/stdc++.h>
using namespace std;
// function which pushes all zeros to end of
// an array.
void pushZerosToEnd( int arr[], int n)
{
// Count of non-zero elements
int count = 0;
// Traverse the array. If element encountered
// is non-zero, then replace the element at
// index 'count' with this element
for ( int i = 0;
i <
n;
i++)
if (arr[i] != 0)// here count is incremented
arr[count++] = arr[i];
// Now all non-zero elements have been shifted
// to front and 'count' is set as index of
// first 0. Make all elements 0 from count
// to end.
while (count <
n)
arr[count++] = 0;
}// function to rearrange the array elements
// after modification
void modifyAndRearrangeArr( int arr[], int n)
{
// if 'arr[]' contains a single element
// only
if (n == 1)
return ;
// traverse the array
for ( int i = 0;
i <
n - 1;
i++) {// if true, perform the required modification
if ((arr[i] != 0) &
&
(arr[i] == arr[i + 1])) {// double current index value
arr[i] = 2 * arr[i];
// put 0 in the next index
arr[i + 1] = 0;
// increment by 1 so as to move two
// indexes ahead during loop iteration
i++;
}
}// push all the zeros at the end of 'arr[]'
pushZerosToEnd(arr, n);
}// function to print the array elements
void printArray( int arr[], int n)
{
for ( int i = 0;
i <
n;
i++)
cout <
<
arr[i] <
<
" " ;
}// Driver program to test above
int main()
{
int arr[] = { 0, 2, 2, 2, 0, 6, 6, 0, 0, 8 };
int n = sizeof (arr) / sizeof (arr[0]);
cout <
<
"Original array: " ;
printArray(arr, n);
modifyAndRearrangeArr(arr, n);
cout <
<
"\nModified array: " ;
printArray(arr, n);
return 0;
}
Java
// Java implementation to rearrange the
// array elements after modification
class GFG {// function which pushes all
// zeros to end of an array.
static void pushZerosToEnd( int arr[], int n)
{
// Count of non-zero elements
int count = 0 ;
// Traverse the array. If element
// encountered is non-zero, then
// replace the element at index
// 'count' with this element
for ( int i = 0 ;
i <
n;
i++)
if (arr[i] != 0 )// here count is incremented
arr[count++] = arr[i];
// Now all non-zero elements
// have been shifted to front and
// 'count' is set as index of first 0.
// Make all elements 0 from count to end.
while (count <
n)
arr[count++] = 0 ;
}// function to rearrange the array
//elements after modification
static void modifyAndRearrangeArr( int arr[], int n)
{
// if 'arr[]' contains a single element
// only
if (n == 1 )
return ;
// traverse the array
for ( int i = 0 ;
i <
n - 1 ;
i++) {// if true, perform the required modification
if ((arr[i] != 0 ) &
&
(arr[i] == arr[i + 1 ]))
{// double current index value
arr[i] = 2 * arr[i];
// put 0 in the next index
arr[i + 1 ] = 0 ;
// increment by 1 so as to move two
// indexes ahead during loop iteration
i++;
}
}// push all the zeros at
// the end of 'arr[]'
pushZerosToEnd(arr, n);
}// 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] + " " );
System.out.println();
}// Driver program to test above
public static void main(String[] args)
{
int arr[] = { 0 , 2 , 2 , 2 , 0 , 6 , 6 , 0 , 0 , 8 };
int n = arr.length;
System.out.print( "Original array: " );
printArray(arr, n);
modifyAndRearrangeArr(arr, n);
System.out.print( "Modified array: " );
printArray(arr, n);
}
}// This code is contributed
// by prerna saini
Python3
# Python3 implementation to rearrange
# the array elements after modification# function which pushes all zeros
# to end of an array.
def pushZerosToEnd(arr, n):# Count of non-zero elements
count = 0# Traverse the array. If element
# encountered is non-zero, then
# replace the element at index
# 'count' with this element
for i in range ( 0 , n):
if arr[i] ! = 0 :# here count is incremented
arr[count] = arr[i]
count + = 1# Now all non-zero elements have been
# shifted to front and 'count' is set
# as index of first 0. Make all
# elements 0 from count to end.
while (count <
n):
arr[count] = 0
count + = 1# function to rearrange the array
# elements after modification
def modifyAndRearrangeArr(ar, n):# if 'arr[]' contains a single
# element only
if n = = 1 :
return# traverse the array
for i in range ( 0 , n - 1 ):# if true, perform the required modification
if (arr[i] ! = 0 ) and (arr[i] = = arr[i + 1 ]):# double current index value
arr[i] = 2 * arr[i]# put 0 in the next index
arr[i + 1 ] = 0# increment by 1 so as to move two
# indexes ahead during loop iteration
i + = 1# push all the zeros at the end of 'arr[]'
pushZerosToEnd(arr, n)# 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 = [ 0 , 2 , 2 , 2 , 0 , 6 , 6 , 0 , 0 , 8 ]
n = len (arr) print ( "Original array:" , end = " " )
printArray(arr, n)modifyAndRearrangeArr(arr, n)print ( "\nModified array:" , end = " " )
printArray(arr, n)# This code is contributed by Smitha Dinesh Semwal
C#
// C# implementation to rearrange the
// array elements after modification
using System;
class GFG {// function which pushes all
// zeros to end of an array.
static void pushZerosToEnd( int [] arr, int n)
{
// Count of non-zero elements
int count = 0;
// Traverse the array. If element
// encountered is non-zero, then
// replace the element at index
// 'count' with this element
for ( int i = 0;
i <
n;
i++)
if (arr[i] != 0)// here count is incremented
arr[count++] = arr[i];
// Now all non-zero elements
// have been shifted to front and
// 'count' is set as index of first 0.
// Make all elements 0 from count to end.
while (count <
n)
arr[count++] = 0;
}// function to rearrange the array
// elements after modification
static void modifyAndRearrangeArr( int [] arr, int n)
{
// if 'arr[]' contains a single element
// only
if (n == 1)
return ;
// traverse the array
for ( int i = 0;
i <
n - 1;
i++) {// if true, perform the required modification
if ((arr[i] != 0) &
&
(arr[i] == arr[i + 1])) {// double current index value
arr[i] = 2 * arr[i];
// put 0 in the next index
arr[i + 1] = 0;
// increment by 1 so as to move two
// indexes ahead during loop iteration
i++;
}
}// push all the zeros at
// the end of 'arr[]'
pushZerosToEnd(arr, n);
}// function to print the array elements
static void printArray( int [] arr, int n)
{
for ( int i = 0;
i <
n;
i++)
Console.Write(arr[i] + " " );
Console.WriteLine();
}// Driver program to test above
public static void Main()
{
int [] arr = { 0, 2, 2, 2, 0, 6, 6, 0, 0, 8 };
int n = arr.Length;
Console.Write( "Original array: " );
printArray(arr, n);
modifyAndRearrangeArr(arr, n);
Console.Write( "Modified array: " );
printArray(arr, n);
}
}// This code is contributed by Sam007
输出如下:
Original array: 0 2 2 2 0 6 6 0 0 8
Modified array: 4 2 12 8 0 0 0 0 0 0
【算法设计(将第一个元素加倍,然后将零移动到结尾)】时间复杂度:O(n)。
推荐阅读
- Python如何使用Collections.UserDict(代码示例)
- Python程序如何实现在列表中查找第二大数字()
- PHP如何使用Ds\Sequence apply()函数(示例)
- PHP如何使用DS\Map clear()函数(用法示例)
- 算法设计(如何实现CamelCase模式匹配(代码示例))
- 如何反向一个整数的位数((包括溢出处理))
- Win8.1桌面与任务栏总是自动刷新怎样处理?
- Win8.1无法升级Win10出错80240020怎样处理?
- Win8系统如何用Dism命令安装补丁文件?