给定两个分别由N和M个整数以及两个整数X和Y组成的数组arr1 []和arr2 [] ,任务是检查是否有可能从arr1 []中选择X个元素,并从arr2 []中选择Y个元素,例如这些X元素中最大的元素小于这些Y元素中的最小元素。如果可能,请打印“是” 。否则,打印“否” 。
例子:
Input: arr1[] = {1, 1, 1, 1, 1}, arr2[] = {2, 2}, X = 3, Y = 1
Output: Yes
Explanation: Every possible selection satisfies the above condition as every element of arr1[] is less than minimum element in the arr2[].
Input: arr1[] = {1, 2, 3}, arr2[] = {3, 4, 5}, X = 2, Y = 1
Output: Yes
Explanation: One possible selection is take elements at indices 0 and 1 from arr1[] and indices 0 from arr2[], i.e {1, 2} and {3}.
方法:想法是按照升序对两个数组进行排序,然后从arr1 []中选择第一个X元素,然后从arr2 []中选择最后一个Y元素。请按照以下步骤解决问题:
- 以升序对两个数组进行排序。
- 如果X大于N或Y大于M ,则打印“否”,因为不可能选择任何这样的组合。
- 否则,如果arr1 [X – 1]的值小于arr2 [M – Y] ,则打印“是” 。
- 否则,打印“否” 。如果以上条件都不满足。
下面是上述方法的实现:
C++
Java
Python3
C#
Javascript
输出:
时间复杂度: O(N * log N)
辅助空间O(1)