📜  打印 0 – 99 范围内的缺失元素

📅  最后修改于: 2022-05-13 01:57:51.059000             🧑  作者: Mango

打印 0 – 99 范围内的缺失元素

给定一个整数数组,打印0-99范围内的缺失元素。如果缺少一个以上,请整理它们,否则只需打印数字。
请注意,输入数组可能未排序,并且可能包含[0-99]范围之外的数字,但仅考虑此范围以打印丢失的元素。

例子 :

Input: {88, 105, 3, 2, 200, 0, 10}
Output: 1
        4-9
        11-87
        89-99


Input: {9, 6, 900, 850, 5, 90, 100, 99}
Output: 0-4
        7-8
        10-89
        91-98

预期时间复杂度O(n) ,其中n是输入数组的大小。

这个想法是使用大小为100的布尔数组来跟踪位于099范围内的数组元素。我们首先遍历输入数组并在布尔数组中标记这些存在的元素。一旦标记了所有存在的元素,布尔数组将用于打印缺失的元素。

以下是上述思想的实现。

C++
// C++ program for print missing elements
#include 
#define LIMIT 100
using namespace std;
 
// A O(n) function to print missing elements in an array
void printMissing(int arr[], int n)
{
    // Initialize all number from 0 to 99 as NOT seen
    bool seen[LIMIT] = {false};
 
    // Mark present elements in range [0-99] as seen
    for (int i=0; i


C
// C program for print missing elements
#include
#define LIMIT 100
 
// A O(n) function to print missing elements in an array
void printMissing(int arr[], int n)
{
    // Initialize all number from 0 to 99 as NOT seen
    bool seen[LIMIT] = {false};
 
    // Mark present elements in range [0-99] as seen
    for (int i=0; i


Java
class PrintMissingElement
{
    // A O(n) function to print missing elements in an array
    void printMissing(int arr[], int n)
    {
        int LIMIT = 100;
 
        boolean seen[] = new boolean[LIMIT];
 
        // Initialize all number from 0 to 99 as NOT seen
        for (int i = 0; i < LIMIT; i++)
            seen[i] = false;
 
        // Mark present elements in range [0-99] as seen
        for (int i = 0; i < n; i++)
        {
            if (arr[i] < LIMIT)
                seen[arr[i]] = true;
        }
 
        // Print missing element
        int i = 0;
        while (i < LIMIT)
        {
            // If i is missing
            if (seen[i] == false)
            {
                // Find if there are more missing elements after i
                int j = i + 1;
                while (j < LIMIT && seen[j] == false)
                    j++;
                 
                // Print missing single or range
                int p = j-1;
                System.out.println(i+1==j ? i : i + "-" + p);
 
                // Update u
                i = j;
            }
            else
                i++;
        }
    }
 
    // Driver program to test above functions
    public static void main(String[] args)
    {
        PrintMissingElement missing = new PrintMissingElement();
        int arr[] = {88, 105, 3, 2, 200, 0, 10};
        int n = arr.length;
        missing.printMissing(arr, n);
    }
}


Python3
# Python3 program for print missing elements
 
# A O(n) function to print missing elements in an array
def printMissing(arr, n) : 
    LIMIT = 100
    seen = [False]*LIMIT
     
    # Initialize all number from 0 to 99 as NOT seen
    for i in range(LIMIT) :
      seen[i] = False
     
    # Mark present elements in range [0-99] as seen
    for i in range(n) :
      if (arr[i] < LIMIT) :
        seen[arr[i]] = True
     
    # Print missing element
    i = 0
    while (i < LIMIT) :
     
      # If i is missing
      if (seen[i] == False) :
       
        # Find if there are more missing elements after i
        j = i + 1
        while (j < LIMIT and seen[j] == False) :
          j += 1
     
        # Print missing single or range
        p = j - 1
        if(i + 1 == j) :   
          print(i)
         
        else :
          print(i, "-", p)
     
        # Update u
        i = j
       
      else :
        i += 1
   
  # Driver code
arr = [88, 105, 3, 2, 200, 0, 10]
n = len(arr)
printMissing(arr, n)
 
# This code is contributed by divyesh072019.


C#
using System;
class GFG
{
 
  // A O(n) function to print missing elements in an array
  static void printMissing(int[] arr, int n) 
  {
    int LIMIT = 100;
    bool[] seen = new bool[LIMIT];
    int i;
 
    // Initialize all number from 0 to 99 as NOT seen
    for (i = 0; i < LIMIT; i++) 
      seen[i] = false;
 
    // Mark present elements in range [0-99] as seen
    for (i = 0; i < n; i++) 
    {
      if (arr[i] < LIMIT)
        seen[arr[i]] = true;
    }
 
    // Print missing element
    i = 0;
    while (i < LIMIT) 
    {
      // If i is missing
      if (seen[i] == false) 
      {
        // Find if there are more missing elements after i
        int j = i + 1;
        while (j < LIMIT && seen[j] == false)
          j++;
 
        // Print missing single or range
        int p = j - 1;
        if(i + 1 == j)
        {
          Console.WriteLine(i);
        }
        else
        {
          Console.WriteLine(i + "-" + p);
        }
 
        // Update u
        i = j;
      } 
      else
        i++;
    }
  }
 
  // Driver code
  static void Main()
  {
    int[] arr = {88, 105, 3, 2, 200, 0, 10};
    int n = arr.Length;
    printMissing(arr, n);
  }
}
 
// This code is contributed by divyeshrabadiya07.


PHP


Javascript


输出 :

1
4-9
11-87
89-99

时间复杂度: O(n)

辅助空间: O(1)