给定N个整数的数组arr [] 。任务是在数组的前一半和后一半中找到最大的元素。请注意,如果数组的大小为奇数,则中间元素将同时包含在这两个部分中。
例子:
Input: arr[] = {1, 12, 14, 5}
Output: 12, 14
First half is {1, 12} and the second half is {14, 5}.
Input: arr[] = {1, 2, 3, 4, 5}
Output: 3, 5
方法:计算数组的中间索引为mid = N / 2 。现在,如果N为偶数,则前半部分元素将出现在子数组arr [0 … mid-1]和arr [mid … N-1]中。
如果N为奇数,则两半分别为arr [0…mid]和arr [mid … N-1]
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to print largest element in
// first half and second half of an array
void findMax(int arr[], int n)
{
// To store the maximum element
// in the first half
int maxFirst = INT_MIN;
// Middle index of the array
int mid = n / 2;
// Calculate the maximum element
// in the first half
for (int i = 0; i < mid; i++)
maxFirst = max(maxFirst, arr[i]);
// If the size of array is odd then
// the middle element will be included
// in both the halves
if (n % 2 == 1)
maxFirst = max(maxFirst, arr[mid]);
// To store the maximum element
// in the second half
int maxSecond = INT_MIN;
// Calculate the maximum element
// int the second half
for (int i = mid; i < n; i++)
maxSecond = max(maxSecond, arr[i]);
// Print the found maximums
cout << maxFirst << ", " << maxSecond;
}
// Driver code
int main()
{
int arr[] = { 1, 12, 14, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
findMax(arr, n);
return 0;
}
Java
// Java implementation of the approach
import java.io.*;
class GFG
{
static void findMax(int []arr, int n)
{
// To store the maximum element
// in the first half
int maxFirst = Integer.MIN_VALUE;
// Middle index of the array
int mid = n / 2;
// Calculate the maximum element
// in the first half
for (int i = 0; i < mid; i++)
{
maxFirst = Math.max(maxFirst, arr[i]);
}
// If the size of array is odd then
// the middle element will be included
// in both the halves
if (n % 2 == 1)
{
maxFirst = Math.max(maxFirst, arr[mid]);
}
// To store the maximum element
// in the second half
int maxSecond = Integer.MIN_VALUE;
// Calculate the maximum element
// int the second half
for (int i = mid; i < n; i++)
{
maxSecond = Math.max(maxSecond, arr[i]);
}
// Print the found maximums
System.out.print(maxFirst + ", " + maxSecond);
// cout << maxFirst << ", " << maxSecond;
}
// Driver Code
public static void main(String[] args)
{
int []arr = { 1, 12, 14, 5 };
int n = arr.length;
findMax(arr, n);
}
}
// This code is contributed by anuj_67..
Python3
# Python3 implementation of the approach
import sys
# Function to print largest element in
# first half and second half of an array
def findMax(arr, n) :
# To store the maximum element
# in the first half
maxFirst = -sys.maxsize - 1
# Middle index of the array
mid = n // 2;
# Calculate the maximum element
# in the first half
for i in range(0, mid):
maxFirst = max(maxFirst, arr[i])
# If the size of array is odd then
# the middle element will be included
# in both the halves
if (n % 2 == 1):
maxFirst = max(maxFirst, arr[mid])
# To store the maximum element
# in the second half
maxSecond = -sys.maxsize - 1
# Calculate the maximum element
# int the second half
for i in range(mid, n):
maxSecond = max(maxSecond, arr[i])
# Print the found maximums
print(maxFirst, ",", maxSecond)
# Driver code
arr = [1, 12, 14, 5 ]
n = len(arr)
findMax(arr, n)
# This code is contributed by ihritik
C#
// C# implementation of the approach
using System;
class GFG
{
static void findMax(int []arr, int n)
{
// To store the maximum element
// in the first half
int maxFirst = int.MinValue;
// Middle index of the array
int mid = n / 2;
// Calculate the maximum element
// in the first half
for (int i = 0; i < mid; i++)
{
maxFirst = Math.Max(maxFirst, arr[i]);
}
// If the size of array is odd then
// the middle element will be included
// in both the halves
if (n % 2 == 1)
{
maxFirst = Math.Max(maxFirst, arr[mid]);
}
// To store the maximum element
// in the second half
int maxSecond = int.MinValue;
// Calculate the maximum element
// int the second half
for (int i = mid; i < n; i++)
{
maxSecond = Math.Max(maxSecond, arr[i]);
}
// Print the found maximums
Console.WriteLine(maxFirst + ", " + maxSecond);
// cout << maxFirst << ", " << maxSecond;
}
// Driver Code
public static void Main()
{
int []arr = { 1, 12, 14, 5 };
int n = arr.Length;
findMax(arr, n);
}
}
// This code is contributed by nidhiva
输出:
12, 14
时间复杂度: O(n)
辅助空间: O(1)