Найдите длину самой длинной последовательности последовательных элементов из заданного несортированного массива целых чисел - PullRequest
0 голосов
/ 03 августа 2020

У меня возникли проблемы с поиском самых длинных последовательных элементов последовательности, и именно эта часть сортирует массив и складывает длину последовательных элементов в ArrayList. Может ли кто-нибудь сказать мне, почему этот код неправильный?

public static int longest_sequence(int[] array)
{
    int length = 0;
    // ArrayList to hold all lengths
    ArrayList<Integer> consecutiveArray = new ArrayList<Integer>();
    
    Arrays.sort(array);
    
    for (int i = 0; i < array.length - 1; i++)
    {
        if (array[i] + 1 == array[i + 1])
        {
            length++;
        }
        else
        {
            consecutiveArray.add(length);
            length = 0;
        }
    }

    Collections.sort(consecutiveArray);
    
    return consecutiveArray.get(consecutiveArray.size() - 1);
}

1 Ответ

0 голосов
/ 03 августа 2020
public static int longest_sequence(int[] array) {
    if (array.length == 0)
        return 0;

    int length = 1;
    int ans = 1;
    
    Arrays.sort(array);
    
    for (int i = 0; i < array.length - 1; i++)
    {
        if(array[i] == array[i+1]) {
            continue;
        }
        else if (array[i] + 1 == array[i + 1])
        {
            length++;
        }
        else
        {
            length = 1;
        }
        
        ans = Math.max(ans,length);
    }

    
    return ans;
}

Хорошо, при условии, что самая длинная последовательная последовательность не должна быть заказана, вы можете сделать несколько вещей:

  1. Длина всегда может быть равна единице, потому что самая длинная последовательная последовательность всегда будет содержать одно число, если только входной массив пуст.
  2. Вам нужно пропустить равные последовательные числа, что будет в первом случае, если продолжит итерацию.
  3. Вам не нужен conscutive_array, достаточно одной переменной для хранения длины самой длинной последовательной последовательности, что делает переменная ans.
...