【问题标题】:Find the length of the longest consecutive elements sequence from a given unsorted array of integers从给定的未排序整数数组中查找最长连续元素序列的长度
【发布时间】:2020-08-03 18:29:03
【问题描述】:

我在尝试查找序列中最长的连续元素时遇到了一些麻烦,这部分是对数组进行排序并将连续元素的长度添加到 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);
}

【问题讨论】:

  • 预期的输入和输出?如果这是来自 leetcode 之类的网站,请同时发布问题的链接。
  • 调试你的代码。
  • 当您对输入数组进行排序时,您正在更改序列Arrays.sort(array);
  • 你只是应该找到它的长度还是元素的实际子数组?

标签: java arrays arraylist collections


【解决方案1】:
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. 长度始终可以为 1,因为最长的连续序列始终包含一个数字,除非输入数组为空。
  2. 您需要跳过相等的连续数字,第一个 if 通过继续迭代来完成。
  3. 您不需要连续数组,单个变量足以保存最长连续序列的长度,“ans”变量就是这样做的。

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 2019-09-15
    • 2020-09-19
    • 1970-01-01
    • 2013-05-19
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多