Поиск подмассива в массиве - C#
Формулировка задачи:
Если подмассив найден в массиве, то вернуть нужно минимальный индекс, с которого начинается подмассив в исходном массиве. Например, поиск подмассива "3,4" в массиве "1,2,3,4,3,4" должен вернуть 2. Если подмассив не найден, то вернуть нужно -1. Считайте, что пустой подмассив содержится в любом массиве, начиная с индекса 0.
Как искать отдельные элементы - понятно. А вот как задать поиск целого подмассива, ведь один элемент может совпадать, а другой нет. Скорее всего нужно использовать вложенный цикл, но какие действия он должен производить, непонятно. Подайте хотя б идею. FindSubarrayStartIndex - основной метод поиска, реализовать нужно ContainsAtIndex - который используется в нем
Листинг программы
- public static void Main()
- {
- Console.WriteLine(FindSubarrayStartIndex(new[] { 100, 100, 100, 100 }, new[] { 100, 100 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2, 3 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2, 3 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 3 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1 }, new[] { 1, 2, 3 }));
- Console.WriteLine(FindSubarrayStartIndex(new int[0], new[] { 1, 2, 3 }));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new int[0]));
- Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 1, 2, 3 }, new[] {1, 2, 3}));
- Console.WriteLine(FindSubarrayStartIndex(new int[0], new int[0]));
- }
- public static int FindSubarrayStartIndex(int[] array, int[] subArray)
- {
- for (int i = 0; i < array.Length - subArray.Length + 1; i++)
- if (ContainsAtIndex(array, subArray, i)) return i;
- return -1;
- }
- public static int ContainsAtIndex(int[] array, int[] subArray, i)
- {
- for(int i = ; i < array.Length;i++)
- {
- for(j = 0; j < subArray.Length; j++)
- {
- }
- }
- }
Решение задачи: «Поиск подмассива в массиве»
textual
Листинг программы
- public static bool ContainsAtIndex(int[] array, int[] subArray, int index)
- {
- bool contains = true;
- if (subArray.Length > 0)
- {
- int subLength = subArray.Length;
- for (int subIndex = 0; subIndex < subLength; subIndex += 1)
- {
- if (array[subIndex + index] != subArray[subIndex])
- {
- contains = false;
- break;
- }
- }
- }
- return contains;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д