📌  相关文章
📜  计算由前M个自然数组成的N长度数组,其子数组可以通过替换少于一半的元素而成为回文的

📅  最后修改于: 2021-06-25 13:31:39             🧑  作者: Mango

给定两个整数NM ,任务是查找元素范围为[1,M]的大小为N的数组的数目,在其中可以通过替换少于一半的元素来使长度大于1的所有子数组回文即floor(length / 2)

例子:

方法:可以根据以下观察结果解决问题:

  • 使数组成为回文区所需的最大允许操作数可能是floor(size(array)/ 2)
  • 可以看出,通过选择一个以相同值开始和结束的子数组,使其成为回文集所需的操作次数将小于floor(subarray的大小)/ 2
  • 因此,任务减少为使用[1,M]范围内的整数值找到大小为N的数组的数量,该整数值不包含任何重复元素,这可以通过找到MN的置换即Mp来轻松完成。 N ,等于M *(M – 1)*(M – 2)*…*(M – N +1)。

请按照以下步骤解决问题:

  1. 初始化一个整数变量,例如ans = 1
  2. i = 0遍历到N – 1,并将ans更新为ans = ans *(Mi)
  3. 打印ans作为答案。

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
typedef long long ll;
 
// Function to find the number of arrays
// following the given condition
void noOfArraysPossible(ll N, ll M)
{
    // Initialize answer
    ll ans = 1;
 
    // Calculate nPm
    for (ll i = 0; i < N; ++i) {
        ans = ans * (M - i);
    }
 
    // Print ans
    cout << ans;
}
 
// Driver Code
int main()
{
 
    // Given N and M
    ll N = 2, M = 3;
 
    // Function Call
    noOfArraysPossible(N, M);
 
    return 0;
}


Java
// Java program for the above approach
class GFG
{
 
// Function to find the number of arrays
// following the given condition
static void noOfArraysPossible(int N, int M)
{
    // Initialize answer
    int ans = 1;
 
    // Calculate nPm
    for (int i = 0; i < N; ++i)
    {
        ans = ans * (M - i);
    }
 
    // Print ans
    System.out.print(ans);
}
 
// Driver Code
public static void main(String[] args)
{
 
    // Given N and M
    int N = 2, M = 3;
 
    // Function Call
    noOfArraysPossible(N, M);
}
}
 
// This code is contributed by Princi Singh


Python3
# Python3 program for the above approach
 
# Function to find the number of arrays
# following the given condition
def noOfArraysPossible(N, M):
     
    # Initialize answer
    ans = 1
  
    # Calculate nPm
    for i in range(N):
        ans = ans * (M - i)
         
    # Print ans
    print(ans)
  
# Driver Code
if __name__ == "__main__" :
     
    # Given N and M
    N = 2
    M = 3
     
    # Function Call
    noOfArraysPossible(N, M)
     
# This code is contributed by jana_sayantan


C#
// C# program to implement
// the above approach 
using System;
 
class GFG{
      
// Function to find the number of arrays
// following the given condition
static void noOfArraysPossible(int N, int M)
{
    // Initialize answer
    int ans = 1;
  
    // Calculate nPm
    for (int i = 0; i < N; ++i)
    {
        ans = ans * (M - i);
    }
  
    // Print ans
    Console.Write(ans);
}
  
// Driver Code
public static void Main()
{
    // Given N and M
    int N = 2, M = 3;
  
    // Function Call
    noOfArraysPossible(N, M);
}
}
 
// This code is contributed by susmitakundugoaldanga


Javascript


输出:
6

时间复杂度: O(N)
辅助空间: O(1)