打印范围在0到99之间的缺失元素

给定一个整数数组,打印0-99范围内缺失的元素。如果丢失了不止一个,请核对,否则只需打印数字。 请注意,输入数组可能无法排序,并且可能包含[0-99]范围之外的数字,但在打印缺少的元素时,仅考虑此范围。

null

例如:

Input: {88, 105, 3, 2, 200, 0, 10}Output: 1        4-9        11-87        89-99Input: {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 <bits/stdc++.h>
#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<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
(i+1 == j)? cout  <<  i : cout << "" << i << "-" << j-1;
// Update u
i = j;
}
else
i++;
}
}
// Driver program
int main()
{
int arr[] = {88, 105, 3, 2, 200, 0, 10};
int n = sizeof (arr)/ sizeof (arr[0]);
printMissing(arr, n);
return 0;
}
// This code is contributed by shivanisinghss2110


C

// C program for print missing elements
#include<stdio.h>
#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<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
(i+1 == j)? printf ( "%dn" , i): printf ( "%d-%dn" , i, j-1);
// Update u
i = j;
}
else
i++;
}
}
// Driver program
int main()
{
int arr[] = {88, 105, 3, 2, 200, 0, 10};
int n = sizeof (arr)/ sizeof (arr[0]);
printMissing(arr, n);
return 0;
}


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

<?php
// PHP program for print
// missing elements
$LIMIT = 100;
// A O(n) function to print
// missing elements in an array
function printMissing( $arr , $n )
{
global $LIMIT ;
// Initialize all number from
// 0 to 99 as NOT seen
$seen = (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
$j = $i + 1;
while ( $j < $LIMIT &&
$seen [ $j ] == false)
$j ++;
// Print missing
// single or range
if (( $i + 1 == $j ) == true)
echo $i , "" ;
else
echo $i , "-" , $j - 1, "" ;
// Update u
$i = $j ;
}
else
$i ++;
}
}
// Driver Code
$arr = array (88, 105, 3, 2,
200, 0, 10);
$n = sizeof( $arr );
printMissing( $arr , $n );
// This code is contributed by aj_36
?>


Javascript

<script>
// Javascript program for print missing elements
// A O(n) function to print missing
// elements in an array
function printMissing(arr, n)
{
let LIMIT = 100;
let seen = new Array(LIMIT);
let 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
let j = i + 1;
while (j < LIMIT && seen[j] == false )
j++;
// Print missing single or range
let p = j - 1;
if (i + 1 == j)
{
document.write(i + "</br>" );
}
else
{
document.write(i + "-" + p + "</br>" );
}
// Update u
i = j;
}
else
i++;
}
}
// Driver code
let arr = [88, 105, 3, 2, 200, 0, 10];
let n = arr.length;
printMissing(arr, n);
// This code is contributed by suresh07
</script>


输出:

14-911-8789-99

上述程序的时间复杂度为O(n)。

本文由 维涅什·纳拉亚南 索米亚·桑帕斯 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享