给定一个数组,其中arr []由N个不同的元素组成,任务是计算可以满足以下属性的给定数组的可能排列:
- 这两个部分必须排序。
- arr [i]必须小于arr [N / 2 + i]
注意: N始终为偶数,索引从0开始。
例子:
Input: arr[] = {10, 20, 30, 40}
Output: 2
Explanation:
Possible permutations of the given array that satisfy the given conditions are:{{10, 20, 30, 40}, {10, 30, 20, 40}}.
Therefore, the required output is 2.
Input: arr[] = {1, 2}
Output: 1
方法:请按照以下步骤解决问题:
- 初始化一个变量,例如cntPerm,以存储满足给定条件的给定数组的排列计数。
- 使用以下公式找到2N C N的二项式系数的值:
= [{N × (N – 1) × …………. × (N – R + 1)} / {(R × (R – 1) × ….. × 1)}]
- 最后,计算加泰罗尼亚数= 2N C N /(N + 1)并将其打印为所需答案。
下面是上述方法的实现:
C++
// C++ Program to implement
// the above approach
#include
using namespace std;
// Function to get the value
// of binomial coefficient
int binCoff(int N, int R)
{
// Stores the value of
// binomial coefficient
int res = 1;
if (R > (N - R)) {
// Since C(N, R)
// = C(N, N - R)
R = (N - R);
}
// Calculate the value
// of C(N, R)
for (int i = 0; i < R; i++) {
res *= (N - i);
res /= (i + 1);
}
return res;
}
// Function to get the count of
// permutations of the array
// that satisfy the condition
int cntPermutation(int N)
{
// Stores count of permutations
// of the array that satisfy
// the given condition
int cntPerm;
// Stores the value of C(2N, N)
int C_2N_N = binCoff(2 * N, N);
// Stores the value of
// catalan number
cntPerm = C_2N_N / (N + 1);
// Return answer
return cntPerm;
}
// Driver Code
int main()
{
int arr[] = { 1, 2, 3, 4 };
int N = sizeof(arr) / sizeof(arr[0]);
cout << cntPermutation(N / 2);
return 0;
}
Java
// Java Program to implement
// the above approach
import java.io.*;
class GFG{
// Function to get the value
// of binomial coefficient
static int binCoff(int N,
int R)
{
// Stores the value of
// binomial coefficient
int res = 1;
if (R > (N - R))
{
// Since C(N, R)
// = C(N, N - R)
R = (N - R);
}
// Calculate the value
// of C(N, R)
for (int i = 0; i < R; i++)
{
res *= (N - i);
res /= (i + 1);
}
return res;
}
// Function to get the count of
// permutations of the array
// that satisfy the condition
static int cntPermutation(int N)
{
// Stores count of permutations
// of the array that satisfy
// the given condition
int cntPerm;
// Stores the value of C(2N, N)
int C_2N_N = binCoff(2 * N, N);
// Stores the value of
// catalan number
cntPerm = C_2N_N / (N + 1);
// Return answer
return cntPerm;
}
// Driver Code
public static void main (String[] args)
{
int arr[] = {1, 2, 3, 4};
int N = arr.length;
System.out.println(cntPermutation(N / 2));
}
}
// This code is contributed by sanjoy_62
Python3
# Python3 program to implement
# the above approach
# Function to get the value
# of binomial coefficient
def binCoff(N, R):
# Stores the value of
# binomial coefficient
res = 1
if (R > (N - R)):
# Since C(N, R)
# = C(N, N - R)
R = (N - R)
# Calculate the value
# of C(N, R)
for i in range(R):
res *= (N - i)
res //= (i + 1)
return res
# Function to get the count of
# permutations of the array
# that satisfy the condition
def cntPermutation(N):
# Stores count of permutations
# of the array that satisfy
# the given condition
# Stores the value of C(2N, N)
C_2N_N = binCoff(2 * N, N)
# Stores the value of
# catalan number
cntPerm = C_2N_N // (N + 1)
# Return answer
return cntPerm
# Driver Code
if __name__ == '__main__':
arr = [ 1, 2, 3, 4 ]
N = len(arr)
print(cntPermutation(N // 2))
# This code is contributed by mohit kumar 29
C#
// C# Program to implement
// the above approach
using System;
class GFG{
// Function to get the value
// of binomial coefficient
static int binCoff(int N,
int R)
{
// Stores the value of
// binomial coefficient
int res = 1;
if (R > (N - R))
{
// Since C(N, R)
// = C(N, N - R)
R = (N - R);
}
// Calculate the value
// of C(N, R)
for (int i = 0; i < R; i++)
{
res *= (N - i);
res /= (i + 1);
}
return res;
}
// Function to get the count of
// permutations of the array
// that satisfy the condition
static int cntPermutation(int N)
{
// Stores count of permutations
// of the array that satisfy
// the given condition
int cntPerm;
// Stores the value of C(2N, N)
int C_2N_N = binCoff(2 * N, N);
// Stores the value of
// catalan number
cntPerm = C_2N_N / (N + 1);
// Return answer
return cntPerm;
}
// Driver Code
public static void Main(String[] args)
{
int []arr = {1, 2, 3, 4};
int N = arr.Length;
Console.WriteLine(cntPermutation(N / 2));
}
}
// This code is contributed by shikhasingrajput
输出
2
时间复杂度:O(N)
辅助空间:O(1)