打印 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的布尔数组来跟踪位于0到99范围内的数组元素。我们首先遍历输入数组并在布尔数组中标记这些存在的元素。一旦标记了所有存在的元素,布尔数组将用于打印缺失的元素。
以下是上述思想的实现。
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)