📌  相关文章
📜  从字法上最小长度N的排列,使得对于正好为K个索引,a [i]> a [i] + 1

📅  最后修改于: 2021-06-27 01:36:28             🧑  作者: Mango

给定两个整数N和K,任务是生成N个数字的排列(从1到N的每个数字恰好发生一次),使得a [i]> a [i + 1]的索引数恰好为K。如果无法进行此类排列,则打印“不可能”。
例子:

Input: N = 5, K = 3
Output: 5 4 3 1 2
Starting 3 indices satisfying the condition 
a[i] > a[i]+1

Input: N = 7, k = 4
Output: 7 6 5 4 1 2 3

方法:由于在字典上满足k个索引(即a [i]> a [i + 1])的条件,排列应该是最小的。因此,对于此开始,K + 1个数字应按降序排列,其余的应按升序排列。因此,只需将K数字从N打印到1。然后将数字从1打印到NK。

下面是上述方法的实现:

C++
// C++ implementation of the above approach
#include 
using namespace std;
 
void printPermutation(int n, int k)
{
    int i, mx = n;
    for (i = 1; i <= k; i++) // Decreasing part
    {
        cout << mx << " ";
        mx--;
    }
    for (i = 1; i <= mx; i++) // Increasing part
        cout << i << " ";
}
 
// Driver Code
int main()
{
    int N = 5, K = 3;
 
    if (K >= N - 1)
        cout << "Not Possible";
 
    else
        printPermutation(N, K);
 
    return 0;
}


Java
// Java implementation of the above approach
 
import java.io.*;
 
class GFG {
 
 
static void printPermutation(int n, int k)
{
    int i, mx = n;
    for (i = 1; i <= k; i++) // Decreasing part
    {
        System.out.print( mx + " ");
        mx--;
    }
    for (i = 1; i <= mx; i++) // Increasing part
        System.out.print( i + " ");
}
 
// Driver Code
 
    public static void main (String[] args) {
            int N = 5, K = 3;
 
    if (K >= N - 1)
        System.out.print( "Not Possible");
 
    else
        printPermutation(N, K);
    }
}
 
// This code is contributed by inder_verma..


Python3
# Python3 implementation of the
# above approach
def printPermutation(n, k):
 
    mx = n
    for i in range(1, k + 1): # Decreasing part
        print(mx, end = " ")
        mx -= 1
     
    for i in range(1, mx + 1): # Increasing part
        print(i, end = " ")
 
# Driver Code
if __name__ == "__main__":
 
    N, K = 5, 3
 
    if K >= N - 1:
        print("Not Possible")
 
    else:
        printPermutation(N, K)
 
# This code is contributed
# by Rituraj Jain


C#
// C# implementation of the above approach
using System;
class GFG {
 
 
static void printPermutation(int n, int k)
{
    int i, mx = n;
    for (i = 1; i <= k; i++) // Decreasing part
    {
        Console.Write( mx + " ");
        mx--;
    }
    for (i = 1; i <= mx; i++) // Increasing part
        Console.Write( i + " ");
}
 
// Driver Code
 
    public static void Main () {
            int N = 5, K = 3;
 
    if (K >= N - 1)
        Console.WriteLine( "Not Possible");
 
    else
        printPermutation(N, K);
    }
}
 
// This code is contributed by inder_verma..


PHP
= $N - 1)
        echo "Not Possible";
 
    else
        printPermutation($N, $K);
 
 
// This code is contributed by inder_verma..
?>


Javascript


输出:
5 4 3 1 2

时间复杂度: O(N)

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。