Находить самый большой подсписок в массиве? - PullRequest
0 голосов
/ 29 июня 2018

Как мне найти самый большой подсписок в этом контексте?

Учитывая набор данных из n пикселей RGB значений

например. n = 3

пиксель [1]: 255, 255, 255 пиксель [2]: 0, 20, 0 пиксель [3]: 5, 13, 63

Найдите самый большой подсписок (количество пикселей), который удовлетворяет этому условию: A × (R - rmin) + B × (G - gmin) + C × (B - bmin) ≤ D, где A, B, C и D - это константы, взятые из пользовательского ввода. rmin, gmin, bmin - минимальные значения RGB пикселей в подсписке соответственно.

например. Используя приведенный выше пример данных, размер подсписка = 2, содержит пиксель [2] и пиксель [3], rmin = 0, gmin = 13, bmin = 0

То, что я сделал, - это установил массив для приема данных пикселей и поместил его в дважды вложенный цикл for, первый для подсчета различных возможных начальных пикселей, а второй - для добавления дополнительного пикселя и проверки, если это дополнительный пиксель удовлетворяет условию. Если он не удовлетворяет, цикл завершится, и количество пикселей будет сохранено в массиве, соответствующем начальному пикселю.

Однако это, очевидно, неправильно, поскольку алгоритм не учитывает все различные комбинации. Метод предполагает, что пиксели увеличиваются в числовом порядке, который в этом случае не может быть отсортирован в числовом порядке, поскольку у каждого пикселя есть 3 соответствующих значения. Я также не могу отсортировать их A × (R - rmin) + B × (G - gmin) + C × (B - bmin), так как минимальные значения варьируются в зависимости от каждого подмножества.

Спасибо за помощь:)

1 Ответ

0 голосов
/ 29 июня 2018

Я бы предпочел перебрать строку через указатель, и если указатель начинает какое-то слово (попробуйте strncmp и strlen), я бы сдвинул всю строку влево, как "ALPHA BETA" -> «АБЕТА» с использованием memmove.

Также обратите внимание, что в случае, если вы вызываете оператор return, функция немедленно возвращает . Если вы хотите остановить цикл, используйте оператор break. Если вы хотите пропустить одну итерацию, используйте оператор continue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...