Проблема: заданный массив ввода целых чисел размера n и массив запросов из целых чисел размера k, найдите наименьшее окно входного массива, которое содержит все элементы массива запросов, а также в том же порядке.Найти наименьшее окно входного массива, содержащее все элементы массива запросов
Я пробовал под подход.
int[] inputArray = new int[] { 2, 5, 2, 8, 0, 1, 4, 7 };
int[] queryArray = new int[] { 2, 1, 7 };
Находит позицию всего элемента массива запросов в inputArray.
public static void SmallestWindow(int[] inputArray, int[] queryArray)
{
Dictionary<int, HashSet<int>> dict = new Dictionary<int, HashSet<int>>();
int index = 0;
foreach (int i in queryArray)
{
HashSet<int> hash = new HashSet<int>();
foreach (int j in inputArray)
{
index++;
if (i == j)
hash.Add(index);
}
dict.Add(i, hash);
index = 0;
}
// Need to perform action in above dictionary.??
}
я получил следующего словарь
- INT 2 -> позиции {1, 3}
- INT 1 -> Положение {6}
- INT 7 -> позиции { 8}
Теперь я хочу, чтобы выполнить следующий шаг Findout минимального окна
Сравнить int 2 позицию в int 1 позицию. Как (6-3) < (6-1) .. Поэтому я буду хранить 3, 6 в хэш-карте.
Будет сравнивать позицию int 1 и int 7, как указано выше.
Я не могу понять, как я буду сравнивать два последовательных значения словаря. Пожалуйста помоги.
Если 'queryArray' является' {2, 8, 0} ', каков ожидаемый результат? Индексы '[0-4]' или индексы '[2-4]'? – Ani
@Ani - Я думаю, должен быть '[2-4]', что является самым коротким. –
Да, должно быть [2-4], поскольку это самое маленькое окно –