📜  前N个自然数置换中的有效索引数

📅  最后修改于: 2021-05-07 05:46:19             🧑  作者: Mango

给定前N个自然数的排列P。任务是找到一些我是使得P≤P j所有1≤Ĵ≤我在第一n个自然数的排列。
例子:

方法:对于i = 1,…,N ,定义M i = min {P j ,1≤j≤i} 。现在,当I(1≤I≤N)是固定的,I = P I成立当且仅当对于所有的j(1≤Ĵ≤i)中,P I≤P j的成立。因此,计算所有的M i就足够了。这些可以按照i的升序进行计算,因此可以在总共O(N)的时间内解决该问题。
下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return the number of i's
// such that Pi <= Pj for all 1 <= j <= i
// in the permutation of first N natural numbers
int min_index(int p[], int n)
{
 
    // To store the count of such indices
    int ans = 0;
 
    // Store the mini value
    int mini = INT_MAX;
 
    // For all the elements
    for (int i = 0; i < n; i++) {
        if (p[i] <= mini)
            mini = p[i];
 
        if (mini == p[i])
            ans++;
    }
 
    // Return the required answer
    return ans;
}
 
// Driver code
int main()
{
    int P[] = { 4, 2, 5, 1, 3 };
    int n = sizeof(P) / sizeof(int);
 
    cout << min_index(P, n);
 
    return 0;
}


Java
// Java implementation of the approach
class GFG
{
 
    static int INT_MAX = Integer.MAX_VALUE;
     
    // Function to return the number of i's
    // such that Pi <= Pj for all 1 <= j <= i
    // in the permutation of first N natural numbers
    static int min_index(int p[], int n)
    {
     
        // To store the count of such indices
        int ans = 0;
     
        // Store the mini value
        int mini = INT_MAX;
     
        // For all the elements
        for (int i = 0; i < n; i++)
        {
            if (p[i] <= mini)
                mini = p[i];
     
            if (mini == p[i])
                ans++;
        }
     
        // Return the required answer
        return ans;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int P[] = { 4, 2, 5, 1, 3 };
        int n = P.length;
     
        System.out.println(min_index(P, n));
    }
}
 
// This code is contributed by AnkitRai01


Python3
# Python3 implementation of the approach
import sys
 
INT_MAX = sys.maxsize
 
# Function to return the number of i's
# such that Pi <= Pj for all 1 <= j <= i
# in the permutation of first N natural numbers
def min_index(p, n) :
 
    # To store the count of such indices
    ans = 0;
 
    # Store the mini value
    mini = INT_MAX;
 
    # For all the elements
    for i in range(n) :
        if (p[i] <= mini) :
            mini = p[i];
 
        if (mini == p[i]) :
            ans += 1;
 
    # Return the required answer
    return ans;
 
# Driver code
if __name__ == "__main__" :
 
    P = [ 4, 2, 5, 1, 3 ];
    n = len(P);
    print(min_index(P, n));
 
# This code is contributed by AnkitRai01


C#
// C# implementation of the approach
using System;
 
class GFG
{
 
    static int INT_MAX = int.MaxValue;
     
    // Function to return the number of i's
    // such that Pi <= Pj for all 1 <= j <= i
    // in the permutation of first N natural numbers
    static int min_index(int []p, int n)
    {
     
        // To store the count of such indices
        int ans = 0;
     
        // Store the mini value
        int mini = INT_MAX;
     
        // For all the elements
        for (int i = 0; i < n; i++)
        {
            if (p[i] <= mini)
                mini = p[i];
     
            if (mini == p[i])
                ans++;
        }
     
        // Return the required answer
        return ans;
    }
     
    // Driver code
    public static void Main ()
    {
        int []P = { 4, 2, 5, 1, 3 };
        int n = P.Length;
     
        Console.WriteLine(min_index(P, n));
    }
}
 
// This code is contributed by AnkitRai01


Javascript


输出:
3