Недавно меня попросили написать 3 тестовые программы для работы. Они будут написаны с использованием только основных API Java и любой тестовой среды по моему выбору. Модульные тесты должны быть реализованы там, где это необходимо.
Хотя я вообще не получил никакой обратной связи, я полагаю, что им не понравились мои решения (иначе я бы услышал их), поэтому я решил показать здесь свои программы и спросить, можно ли считать данную реализацию хорошей, а если нет, то почему?
Чтобы не было путаницы, я Пока спрошу только первого.
Реализовать функцию, которая находит массив
в другом массиве большего размера. Он
должен принимать два массива в качестве параметров
и возвращать индекс
первого массива, в котором впервые встречается второй массив
полностью. Например,
findArray([2,3,7,1,20], [7,1]) должен
возвращать 2.
Я не пытался найти какое-либо существующее решение, а хотел сделать это сам.
Возможные причины:
1. Должно быть статично.
2. Следует использовать строковые комментарии вместо блочных.
3. Сначала не проверил наличие нулевых значений (знаю, просто заметил слишком поздно).
4. ?
ОБНОВЛЕНИЕ:
Причин было представлено довольно много, и мне очень сложно выбрать одну. ответьте, так как многие ответы имеют хорошее решение. Как упомянул @adietrich, я склонен полагать, что они хотели, чтобы я продемонстрировал знание основного API (они даже просили написать функцию, а не алгоритм).
Я считаю, что лучший способ обеспечить работу — это предложить как можно больше решений, в том числе:
1. Реализация с использованием метода Collections.indexOfSubList(), чтобы показать, что я знаю API основных коллекций.
2. Реализуйте методом грубой силы, но предоставьте более элегантное решение.
3. Реализуйте с помощью алгоритма поиска, например Бойера-Мура.
4. Реализуйте, используя комбинацию System.arraycopy() и Arrays.equal(). Однако это не лучшее решение с точки зрения производительности, оно покажет мои знания стандартных процедур работы с массивами.
Спасибо всем за ответы!
КОНЕЦ ОБНОВЛЕНИЯ.
Вот что я написал:
Фактическая программа:
package com.example.common.utils;
/**
* This class contains functions for array manipulations.
*
* @author Roman
*
*/
public class ArrayUtils {
/**
* Finds a sub array in a large array
*
* @param largeArray
* @param subArray
* @return index of sub array
*/
public int findArray(int[] largeArray, int[] subArray) {
/* If any of the arrays is empty then not found */
if (largeArray.length == 0 || subArray.length == 0) {
return -1;
}
/* If subarray is larger than large array then not found */
if (subArray.length > largeArray.length) {
return -1;
}
for (int i = 0; i < largeArray.length; i++) {
/* Check if the next element of large array is the same as the first element of subarray */
if (largeArray == subArray[0]) {
boolean subArrayFound = true;
for (int j = 0; j < subArray.length; j++) {
/* If outside of large array or elements not equal then leave the loop */
if (largeArray.length
Подробнее здесь: https://stackoverflow.com/questions/394 ... rger-array
Найти массив внутри другого большего массива ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1732707957
Anonymous
Недавно меня попросили написать 3 тестовые программы для работы. Они будут написаны с использованием только основных API Java и любой тестовой среды по моему выбору. Модульные тесты должны быть реализованы там, где это необходимо.
Хотя я вообще не получил никакой обратной связи, я полагаю, что им не понравились мои решения (иначе я бы услышал их), поэтому я решил показать здесь свои программы и спросить, можно ли считать данную реализацию хорошей, а если нет, то почему?
Чтобы не было путаницы, я Пока спрошу только первого.
Реализовать функцию, которая находит массив
в другом массиве большего размера. Он
должен принимать два массива в качестве параметров
и возвращать индекс
первого массива, в котором впервые встречается второй массив
полностью. Например,
findArray([2,3,7,1,20], [7,1]) должен
возвращать 2.
Я не пытался найти какое-либо существующее решение, а хотел сделать это сам.
Возможные причины:
1. Должно быть статично.
2. Следует использовать строковые комментарии вместо блочных.
3. Сначала не проверил наличие нулевых значений (знаю, просто заметил слишком поздно).
4. ?
[b]ОБНОВЛЕНИЕ[/b]:
Причин было представлено довольно много, и мне очень сложно выбрать одну. ответьте, так как многие ответы имеют хорошее решение. Как упомянул @adietrich, я склонен полагать, что они хотели, чтобы я продемонстрировал знание основного API (они даже просили написать функцию, а не алгоритм).
Я считаю, что лучший способ обеспечить работу — это предложить как можно больше решений, в том числе:
1. Реализация с использованием метода Collections.indexOfSubList(), чтобы показать, что я знаю API основных коллекций.
2. Реализуйте методом грубой силы, но предоставьте более элегантное решение.
3. Реализуйте с помощью алгоритма поиска, например Бойера-Мура.
4. Реализуйте, используя комбинацию System.arraycopy() и Arrays.equal(). Однако это не лучшее решение с точки зрения производительности, оно покажет мои знания стандартных процедур работы с массивами.
Спасибо всем за ответы!
[b]КОНЕЦ ОБНОВЛЕНИЯ.[/b]
Вот что я написал:
Фактическая программа:
package com.example.common.utils;
/**
* This class contains functions for array manipulations.
*
* @author Roman
*
*/
public class ArrayUtils {
/**
* Finds a sub array in a large array
*
* @param largeArray
* @param subArray
* @return index of sub array
*/
public int findArray(int[] largeArray, int[] subArray) {
/* If any of the arrays is empty then not found */
if (largeArray.length == 0 || subArray.length == 0) {
return -1;
}
/* If subarray is larger than large array then not found */
if (subArray.length > largeArray.length) {
return -1;
}
for (int i = 0; i < largeArray.length; i++) {
/* Check if the next element of large array is the same as the first element of subarray */
if (largeArray[i] == subArray[0]) {
boolean subArrayFound = true;
for (int j = 0; j < subArray.length; j++) {
/* If outside of large array or elements not equal then leave the loop */
if (largeArray.length
Подробнее здесь: [url]https://stackoverflow.com/questions/3940194/find-an-array-inside-another-larger-array[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия