给定一个由N 个不同整数和一个正整数K组成的数组arr[] ,任务是找到出现在所有大小为K 的子数组中的最小元素。如果不存在这样的元素,则打印“-1” 。
例子:
Input: arr[] = {1, 2, 3, 4, 5}, K = 4
Output: 2
Explanation:
The subarrays of size 4 are {1, 2, 3, 4} and {2, 3, 4, 5}. The common elements in the above subarrays are {2, 3, 4}.
The minimum of the above common element is 2.
Input: arr[] = {1, 2, 3, 4, 5}, K = 2
Output: -1
Explanation:
The subarrays of size 2 are {1, 2}, {2, 3}, {3, 4}, {4, 5}. Since there is no common element, print -1.
朴素的方法:想法是生成给定大小为K 的数组的所有可能子数组,并在所形成的所有子数组中找到公共元素。之后,找到共同元素,打印其中的最小值。如果在所有子数组中没有发现共同元素,则打印“-1” 。
时间复杂度: O(N 2 )
辅助空间: O(1)
有效的方法:这个想法是首先检查所有子数组中公共元素的条件,如果存在这样的元素,那么它应该在给定数组中的[N – K, K]范围内。以下是我们找不到任何此类最小元素的条件:
- 如果N是奇数且K ≥ (N + 1)/2 。
- 如果N是偶数且K ≥ ((N + 1)/2) + 1 。
如果上述条件不满足,则最小元素位于[N – K, K]范围内。因此,迭代此范围内的给定数组并打印其中最小元素的值。
下面是上述方法的实现:
C++
Java
Python3
C#
Javascript
时间复杂度: O(N)
辅助空间: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live