Информация об изменениях

Сообщение Re[4]: Что вы всегда спрашиваете на собеседовании? от 12.06.2019 1:49

Изменено 12.06.2019 1:52 Артём

Re[4]: Что вы всегда спрашиваете на собеседовании?
Здравствуйте, sergey2b, Вы писали:

S>>>найти первый символ совпадаюший вовсех трех массивах

S>%>Это merge sort- вытаскиваешь наименьшее из всех 3-х, пока не наступит указанная тобой ситуация.

S>можешь словами описать как вытаскивать и сравнивать


"вытаскивать"- инкрементить индекс, указатель, курсор на массиве, адресе памяти, файле.

1) Заводишь массив (на 3 элемента) для хранения текущего значения из каждого из твоих массив+указатель. Например,
int[] current = new int[3]
int[] index = new int[3]
int[][] input = { arr1, arr2, arr3}

2) "Достаешь" из каждого входного массива
current[0] = arr1[index[0]++]
current[1] = arr2[index[1]++]
current[2] = arr3[i3++]

3) Ищешь минимальное min(current)
4) сравниваешь каждое current с минимальным, если равно, то "достаешь" следующее, также считаешь число матчей:
int matched = 3
for (int k= 0, k < 3; ++k) {
if(current[k]==minim) {
++matched;
// добавить проверку на выход за пределы массива
current[k] = input[k][index[k]++];
}
}
if(matched==3) {
// бинго
return minim;
}
goto (3).



S>я после 5 минут обдумывания, не стал делать через мерже а сделал другим пособом


Накидал примитивно. Нужно ещё добавить проверку на неравность размеров 3 массивов, отсутствие матча всех 3 одновременно, и на матч когда последнее значение в массиве.
Re[4]: Что вы всегда спрашиваете на собеседовании?
Здравствуйте, sergey2b, Вы писали:

S>>>найти первый символ совпадаюший вовсех трех массивах

S>%>Это merge sort- вытаскиваешь наименьшее из всех 3-х, пока не наступит указанная тобой ситуация.

S>можешь словами описать как вытаскивать и сравнивать


"вытаскивать"- инкрементить индекс, указатель, курсор на массиве, адресе памяти, файле.

1) Заводишь массив (на 3 элемента) для хранения текущего значения из каждого из твоих массив+указатель. Например,
int[] current = new int[3]
int[] index = new int[3]
int[][] input = { arr1, arr2, arr3}

2) "Достаешь" из каждого входного массива
current[0] = arr1[index[0]++]
current[1] = arr2[index[1]++]
current[2] = arr3[i3++]

3) Ищешь минимальное min(current)
4) сравниваешь каждое current с минимальным, если равно, то "достаешь" следующее, также считаешь число матчей:
int matched = 0;
for (int k= 0, k < 3; ++k) {
if(current[k]==minim) {
++matched;
// добавить проверку на выход за пределы массива
current[k] = input[k][index[k]++];
}
}
if(matched==3) {
// бинго
return minim;
}
goto (3).



S>я после 5 минут обдумывания, не стал делать через мерже а сделал другим пособом


Накидал примитивно. Нужно ещё добавить проверку на неравность размеров 3 массивов, отсутствие матча всех 3 одновременно, и на матч когда последнее значение в массиве.