给定一个排序数组arr[],任务是计算排序数组的第一个和最后一个元素之间缺失数字的数量。
例子:
Input: arr[] = { 1, 4, 5, 8 }
Output: 4
Explanation:
The missing integers in the array are {2, 3, 6, 7}.
Therefore, the count is 4.
Input: arr[] = {5, 10, 20, 40}
Output: 32
天真的方法:
解决问题最简单的方法是遍历数组,计算数组元素的所有相邻差值之和。
时间复杂度: O(N)
辅助空间: O(1)
有效的方法:
为了优化上述方法,我们的想法是观察[arr[0], arr[N – 1]]范围内的数字总数由arr[N-1] – arr[0] + 1 给出.由于数组的大小为N ,数组中缺失整数的计数由arr[N-1] – arr[0] + 1 – N 给出。
下面是上述方法的实现:
C++
// C++ Program for the above approach
#include
using namespace std;
// Function that find the count of
// missing numbers in array a[]
void countMissingNum(int a[], int N)
{
// Calculate the count of missing
// numbers in the array
int count = a[N - 1] - a[0] + 1 - N;
cout << count << endl;
}
// Driver Code
int main()
{
int arr[] = { 5, 10, 20, 40 };
int N = sizeof(arr) / sizeof(arr[0]);
countMissingNum(arr, N);
return 0;
}
Java
// Java program for the above approach
class GFG{
// Function that find the count of
// missing numbers in array a[]
public static void countMissingNum(int[] a,
int N)
{
// Calculate the count of missing
// numbers in the array
int count = a[N - 1] - a[0] + 1 - N;
System.out.println(count);
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 5, 10, 20, 40 };
int N = arr.length;
countMissingNum(arr, N);
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python3 program for the above approach
# Function that find the count of
# missing numbers in array a[]
def countMissingNum(a, N):
# Calculate the count of missing
# numbers in the array
count = a[N - 1] - a[0] + 1 - N
print(count)
# Driver Code
arr = [ 5, 10, 20, 40 ]
N = len(arr)
countMissingNum(arr, N)
# This code is contributed by sanjoy_62
C#
// C# program for the above approach
using System;
class GFG{
// Function that find the count of
// missing numbers in array a[]
public static void countMissingNum(int[] a,
int N)
{
// Calculate the count of missing
// numbers in the array
int count = a[N - 1] - a[0] + 1 - N;
Console.Write(count);
}
// Driver code
public static void Main(string[] args)
{
int []arr = { 5, 10, 20, 40 };
int N = arr.Length;
countMissingNum(arr, N);
}
}
// This code is contributed by rutvik_56
输出:
32
时间复杂度: O(1)
辅助空间: O(1)