Проверьте все числа равны - PullRequest
0 голосов
/ 19 января 2011

Как лучше всего проверить, что все числа в массиве (или списке) равны?

Я думаю, что решение как цикл, который ищет первый неравный элемент, может быть эффективным, но не таким элегантным или читабельным. Какие-нибудь решения в одной строке?

Ответы [ 3 ]

3 голосов
/ 19 января 2011

Любое решение этой проблемы должно выполняться за & Omega; (n) время и делать сравнения & Omega; (n), так как если это не так для некоторого достаточно большого массива, вы не сможете посмотреть все элементы, чтобы проверить, что они имеют одинаковое значение.

Выполнение линейного сканирования массива в поисках любых значений, отличных от первого, возможно, является абсолютным лучшим способом решения этой проблемы. Он выполняет в общей сложности (n - 1) сравнений, которые асимптотически совпадают с нижней границей, элегантно и легко реализуемо.

2 голосов
/ 19 января 2011

Какой-то псевдокод C

i = len(list) - 1;
while (list[i] == list[i+1] && i) i--;
return i == 0;
0 голосов
/ 19 января 2011

Не одна строка, хотя на нужном языке, я уверен, что вы можете получить ее до одной.

РЕДАКТИРОВАТЬ: Так как вы сказали C # ...

return list.Length > 0 && list[0] == list.Aggregate(list[0], (current, i) => current & i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...