当前位置: 首页 > 知识库问答 >
问题:

用不同的整数找出最长的子数组

逄嘉禧
2023-03-14

编写一个方法,该方法采用一个整数数组,并返回其最长的具有不同整数的子数组的长度。

例如,对于 [1,2,3,4,2,3],它应该返回 4

共有3个答案

蒋曾笑
2023-03-14
public static int sizeOfLongestDistinctSubArrayO1(int[] arr) {
    int max = 0;
    Map<Integer, Integer> counts = new HashMap<>();
    int cur = 0;
    int prev = 0;
    for (int i = 0, len = arr.length; i < len; i++) {
        if (counts.containsKey(arr[i])) {
            int j = counts.get(arr[i]);
            max = Math.max(max, cur);
            prev = Math.max(j, prev);
            cur = i - prev;
            counts.put(arr[i], i);
        } else {
            cur++;
            counts.put(arr[i], i);
        }
    }
    return Math.max(max, cur);
}
宦兴朝
2023-03-14
public int[] getLargestSubArray(int[] array) {
    int length = array.length;
    Set<Integer> set = new HashSet<>();
    int longest = 0;
    int start = 0;

    int longestCurrent = 0;
    int startCurrent = 0;

    int j = 0;
    while (j < length) {
        if (!set.contains(array[j])) {
            set.add(array[j]);
            longestCurrent++;

            if (longestCurrent > longest) {
                longest = longestCurrent;
                start = startCurrent;
            }
            j++;
        } else {
            while (startCurrent < j) {
                longestCurrent--;
                if (array[startCurrent++] == (array[j])) {
                    break;
                }
            }
            set.remove(array[j]);
        }
    }
    int[] longestSubSequence = new int[longest];
    System.arraycopy(array, start, longestSubSequence, 0, longest);
    return longestSubSequence;
}
韩欣怿
2023-03-14

我使用HashSet跟踪从索引I到索引j的所有元素,并在遍历列表时保持计数器。线性运行时和空间:

public static int longestSubarray(int[] arr) {
    
    int i = 0, j = 1, max = 0, currLength = 1;
    max = Math.max(max, currLength);
    HashSet<Integer> set = new HashSet<Integer>();
    set.add(arr[0]);
    
    while (i < arr.length - 1 && j < arr.length) {
        if (!set.contains(arr[j])) {
            currLength++;
            set.add(arr[j++]);
        }
        else {
            set.remove(arr[i++]);
            currLength--;
        }
    }
    
    return Math.max(currLength, max);
}
 类似资料:
  • 我需要编写一个递归方法,将int作为输入,并以int(而不是字符串)的形式返回其中最长的相同数字序列。计数序列并不是最难的部分,但当给定一个包含几个序列的数字时,我不知道如何返回正确的值,而不计算所有的序列,而只计算最长的序列。目前,我编写了一段只计算序列长度的代码: 我真的很难完成剩下的事情。

  • 我正在尝试解决这个算法问题: https://dunjudge.me/analysis/problems/469/ 为了方便起见,我总结了下面的问题陈述。 给定一个长度为 ( 多数元素定义为发生的元素 时限:1.5s 例如: 如果给定的数组是[1,2,1,2,3,2], 答案是5,因为从位置1到5 (0索引)的长度为5的子数组[2,1,2,3,2]具有出现为3的数字2 首先想到的是一个明显的强力(

  • 给定一个数组< code>a[0..< code>0之间的整数的N-1] 例: 输入 预期输出:

  • 求其和可被K整除的最长子数组。在O(n)中可能吗?如果不是,它能比n^2更好地完成吗?

  • 我有这个问题: 您将获得一个整数 A 和一个整数 k 的数组。您可以将 A 的元素递减到 k 次,目标是生成一个元素都相等的连续子数组。返回可以用这种方式生成的最长的连续子数组的长度。 例如,如果 A 是 [1,7,3,4,6,5] 并且 k 是 6,那么您可以生成 [1,7,3,4-1,6-1-1-1,5-1-1] = [1,7,3,3,3,3],因此您将返回 4。 最佳解决方案是什么?

  • 我有一个关于Hackkerrank的挑战如下 示例 票=[8,5,4,8,4] 已排序的有效子序列为{4,4,5}和{8,8}。这些子序列的m值分别为3和2。返回3。 功能描述 在下面的编辑器中完成maxTickets函数。 采样输入0 STDIN函数 4张票[]大小n=4 2 3 示例输出0 输出: 我的代码能用吗?有没有我的代码失败的情况?你能为这个挑战提供一个更好的算法吗?