📌  相关文章
📜  检查数组是否是从1到N的数字排列:Set 2

📅  最后修改于: 2021-04-22 00:23:11             🧑  作者: Mango

给定一个包含N个正整数的数组arr ,任务是检查给定的数组arr是否表示一个排列。

例子:

天真的方法:在O(N 2 )时间
这里提到了这种方法

另一种方法:在O(N)时间和O(N)空间中
这里提到了这种方法。

高效方法:使用哈希表

  1. 创建一个N大小的HashTable来存储从1到N的每个数字的频率计数
  2. 遍历给定的数组,并将每个数字的频率存储在HashTable中。
  3. 然后遍历HashTable并检查从1到N的所有数字的频率是否为1。
  4. 如果以上条件为“真”,则打印“是”,否则为“否”。

下面是上述方法的实现:

CPP
// C++ program to decide if an array
// represents a permutation or not
#include 
using namespace std;
  
// Function to check if an
// array represents a permutation or not
string permutation(int arr[], int N)
{
  
    int hash[N + 1] = { 0 };
  
    // Counting the frequency
    for (int i = 0; i < N; i++) {
        hash[arr[i]]++;
    }
  
    // Check if each frequency is 1 only
    for (int i = 1; i <= N; i++) {
        if (hash[i] != 1)
            return "No";
    }
  
    return "Yes";
}
  
// Driver code
int main()
{
    int arr[] = { 1, 1, 5, 5, 3 };
    int n = sizeof(arr) / sizeof(int);
    cout << permutation(arr, n) << endl;
  
    return 0;
}


Java
// Java program to decide if an array
// represents a permutation or not
class GFG{
   
// Function to check if an
// array represents a permutation or not
static String permutation(int arr[], int N)
{
   
    int []hash = new int[N + 1];
   
    // Counting the frequency
    for (int i = 0; i < N; i++) {
        hash[arr[i]]++;
    }
   
    // Check if each frequency is 1 only
    for (int i = 1; i <= N; i++) {
        if (hash[i] != 1)
            return "No";
    }
   
    return "Yes";
}
   
// Driver code
public static void main(String[] args)
{
    int arr[] = { 1, 1, 5, 5, 3 };
    int n = arr.length;
    System.out.print(permutation(arr, n) +"\n");
}
}
  
// This code is contributed by Princi Singh


Python3
# Python3 program to decide if an array
# represents a permutation or not
  
# Function to check if an
# array represents a permutation or not
def permutation(arr,  N) :
  
    hash = [0]*(N + 1);
  
    # Counting the frequency
    for i in range(N) :
        hash[arr[i]] += 1;
  
    # Check if each frequency is 1 only
    for i in range(1, N + 1) :
        if (hash[i] != 1) :
            return "No";
  
    return "Yes";
  
# Driver code
if __name__ == "__main__" :
  
    arr = [ 1, 1, 5, 5, 3 ];
    n = len(arr);
    print(permutation(arr, n));
  
    # This code is contributed by Yash_R


C#
// C# program to decide if an array
// represents a permutation or not
using System;
  
class GFG{
   
    // Function to check if an
    // array represents a permutation or not
    static string permutation(int []arr, int N)
    {
       
        int []hash = new int[N + 1];
       
        // Counting the frequency
        for (int i = 0; i < N; i++) {
            hash[arr[i]]++;
        }
       
        // Check if each frequency is 1 only
        for (int i = 1; i <= N; i++) {
            if (hash[i] != 1)
                return "No";
        }
       
        return "Yes";
    }
       
    // Driver code
    public static void Main(string[] args)
    {
        int []arr = { 1, 1, 5, 5, 3 };
        int n = arr.Length;
        Console.Write(permutation(arr, n) +"\n");
    }
}
  
// This code is contributed by Yash_R


输出:
No

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