Вы играете в игру с N картами. На обеих сторонах каждой карточки есть положительное целое число. Карты лежат на столе. Счет игры - это наименьшее положительное целое число, которое не встречается на открытых картах. Вы можете перевернуть несколько карт. Перевернув их, вы затем читаете числа, обращенные вверх, и пересчитываете счет. Какой максимальный балл вы можете получить?
Написать функцию:
class Solution {
public int solution(int[] A, int[] B);
}
что, учитывая два массива целых чисел A и B, оба длиной N, описывающие числа, написанные на обеих сторонах карточек, обращенные вверх и вниз соответственно, возвращает максимально возможную оценку.
Например, с учетом A = [1, 2, 4, 3]
и B = [1, 3, 2, 3]
ваша функция должна return 5
, поскольку без переворачивания любой карты наименьшее положительное целое число, исключенное из этой последовательности, составляет 5.
Например, учитывая A = [1, 2, 3, 3]
и B = [1, 3, 4, 3]
Следует return 5
.
Учитывая A = [4, 2, 1, 6, 5]
и B = [3, 2, 1, 7, 7]
, ваша функция должна возвращать 4, так как мы могли бы перевернуть первую карточку так, чтобы числа, обращенные вверх, были [3, 2, 1, 6, 5], и невозможно иметь оба номера 3 и 4 обращены вверх.
Учитывая A = [2, 3]
и B = [2, 3]
, ваша функция должна return 1
, так как независимо от того, как карты перевернуты, числа, обращенные вверх, равны [2, 3]
.
Напишите эффективный алгоритм для следующих предположений:
N - целое число в диапазоне [1..100,000];
каждый элемент массивов A, B является целым числом в диапазоне [1..100,000,000];
входные массивы имеют одинаковый размер
Пожалуйста, предоставьте подход к этому вопросу.