给定前N个自然数的排列P。任务是找到一些我是使得P我≤P j的所有1≤Ĵ≤我在第一n个自然数的排列。
例子:
Input: arr[] = {4, 2, 5, 1, 3}
Output: 3
0, 1 and 3 are such indices.
Input: arr[] = {4, 3, 2, 1}
Output: 4
方法:对于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