Найти массив внутри другого большего массиваJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Найти массив внутри другого большего массива

Сообщение Anonymous »

Недавно меня попросили написать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»