Поиск подмассива в массиве - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д