Задать вопрос
@OverLor1

Почему не работает алгоритм?

Мне надо наименьший неиспользуемый элемента массива допустим {0,1,2,3,5}, UniqueElement = 4
почему не работает ids.Any(d => ids[i] + 1 == ids[i + 1])
public static int NextId(int[] ids)
    {
        int UniqueElement = 0;
        for (int i = 0; i < ids.Length; i++)
        {
            for (int j = i + 1; j < ids.Length; j++)
            {
                if (ids[i] == ids[j])
                    return 0;
                if (ids.Any(d => ids[i] + 1 == ids[i + 1]))
                {
                    UniqueElement = ids[i] + 1;
                }
                else
                {
                    return ids.Max() + 1;
                }
            }
        }
        return UniqueElement;
    }
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
@Wisdou
Вот решение за O(n^2), можно сделать за O(n*logn) с помощью сортировки или за O(n) если массив уже отсортирован
public static int NextId(int[] ids)
		{
			for (int i = 0; i < ids.Length; i++)
			{
				if (Array.IndexOf(ids, i) == -1)
				{
					return i;
				}
			}
			return ids.Length;
		}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы