给定大小为n的数组arr [],使得arr []的元素在[0,1,..n-1]范围内,其中每个数字最多出现一次。我们的任务是将数组划分为可以单独排序的最大分区数,然后进行连接以对整个数组进行排序。
例子 :
Input : arr[] = [2, 1, 0, 3]
Output : 2
If divide arr[] into two partitions
{2, 1, 0} and {3}, sort then and concatenate
then, we get the whole array sorted.
Input : arr[] = [2, 1, 0, 3, 4, 5]
Output : 4
The maximum number of partitions are four, we
get these partitions as {2, 1, 0}, {3}, {4}
and {5}
Input : arr[] = [0, 1, 2, 3, 4, 5]
Output : 6
The maximum number of partitions are six, we
get these partitions as {0}, {1}, {2}, {3}, {4}
and {5}
这个想法基于这样一个事实,即如果i处的元素最大为前缀arr [0..i],那么我们可以创建一个以i结尾的分区。
C++
// CPP program to find Maximum number of partitions
// such that we can get a sorted array.
#include
using namespace std;
// Function to find maximum partitions.
int maxPartitions(int arr[], int n)
{
int ans = 0, max_so_far = 0;
for (int i = 0; i < n; ++i) {
// Find maximum in prefix arr[0..i]
max_so_far = max(max_so_far, arr[i]);
// If maximum so far is equal to index,
// we can make a new partition ending at
// index i.
if (max_so_far == i)
ans++;
}
return ans;
}
// Driver code
int main()
{
int arr[] = { 1, 0, 2, 3, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << maxPartitions(arr, n);
return 0;
}
Java
// java program to find Maximum number of partitions
// such that we can get a sorted array
import java.io.*;
class GFG
{
// Function to find maximum partitions.
static int maxPartitions(int arr[], int n)
{
int ans = 0, max_so_far = 0;
for (int i = 0; i < n; ++i) {
// Find maximum in prefix arr[0..i]
max_so_far = Math.max(max_so_far, arr[i]);
// If maximum so far is equal to index,
// we can make a new partition ending at
// index i.
if (max_so_far == i)
ans++;
}
return ans;
}
// Driver code
public static void main (String[] args)
{
int arr[] = { 1, 0, 2, 3, 4 };
int n = arr.length;
System.out.println (maxPartitions(arr, n));
}
}
// This code is contributed by vt_m.
Python3
# Python3 program to find Maximum
# number of partitions such that
# we can get a sorted array.
# Function to find maximum partitions.
def maxPartitions(arr, n):
ans = 0; max_so_far = 0
for i in range(0, n):
# Find maximum in prefix arr[0..i]
max_so_far = max(max_so_far, arr[i])
# If maximum so far is equal to
# index, we can make a new partition
# ending at index i.
if (max_so_far == i):
ans += 1
return ans
# Driver code
arr = [1, 0, 2, 3, 4]
n = len(arr)
print(maxPartitions(arr, n))
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# program to find Maximum number of partitions
// such that we can get a sorted array
using System;
class GFG
{
// Function to find maximum partitions.
static int maxPartitions(int []arr, int n)
{
int ans = 0, max_so_far = 0;
for (int i = 0; i < n; ++i)
{
// Find maximum in prefix arr[0..i]
max_so_far = Math.Max(max_so_far, arr[i]);
// If maximum so far is equal to index,
// we can make a new partition ending at
// index i.
if (max_so_far == i)
ans++;
}
return ans;
}
// Driver code
public static void Main ()
{
int []arr = { 1, 0, 2, 3, 4 };
int n = arr.Length;
Console.Write (maxPartitions(arr, n));
}
}
// This code is contributed by nitin mittal.
PHP
Javascript
输出:
4