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

为什么该方法计算的最大值不大于65537?

丁恩
2023-03-14
public int longestConsecutive(int[] nums) {
        Map<Integer, Boolean> numMap = new ConcurrentHashMap<>();
        Map<Integer, Integer> maxMap = new ConcurrentHashMap<>();
        for (int i : nums) {
            numMap.put(i, false);
        }
        int max = 0;
        for (int n : numMap.keySet()) {
            numMap.remove(n);

            if (maxMap.containsKey(n - 1)) {
                maxMap.put(n, maxMap.get(n - 1) + 1);
                max = Math.max(maxMap.get(n), max);
                continue;
            }

            int lessThan = 0;
            while (numMap.containsKey(n - lessThan - 1)) {
                numMap.remove(n - 1);
                lessThan++;
            }
            maxMap.put(n, lessThan + 1);
            if (lessThan + 1 > max) {
                max = lessThan + 1;
            }

        }
        return max;
    }

这是我对最长连续序列问题的解决方案,它适用于70个案例中的1个。第70个案例阵列的长度为100000。我检查了这个长度和数组的其他长度的解决方案,发现对于大于65537的数组,返回的最大值总是65537。我似乎不明白为什么会这样。我想知道这是否与使用ConcurrentHashmap有关。

这是我的测试:

java prettyprint-override">  @Test
    public void test() {

        for (int i = 0; i < 100000; i++) {
            int n = i;
            int[] arr = new int[n];
            for (int j = 0; j < n; j++) {
                arr[j] = j;
            }
            assertEquals(n, longestConsecutive(arr));
        }

    }

通过返回65537,测试在65538处失败。我还检查了一些大于这个值的随机值,同样的值也失败了。

共有1个答案

伍嘉
2023-03-14

ConcurrentModificationException表示您的逻辑错误-您正在同时编辑和迭代映射。

迭代numMap。keySet()nums的值-您可以将外部循环更改为:

for (int n : nums) {
    ...
}

在执行编辑时,这将避免迭代器上的ConnettModificationExcema。在这种情况下,您不需要在HashMap上使用ConnettHashMap-两者都可以正常工作,并且测试通过了100,000。

 类似资料:
  • 问题内容: 是否可以做这样的事情 要么 在CSS中? 问题答案: ,和终于可以! 从Firefox 75,Chrome 79和Safari 11.1(除外)开始。 并接受任意数量的参数。 具有语法,等效于。 并且可以嵌套。它们既可以在内部使用,也可以在外部使用,它们还可以包含数学表达式,这意味着您可以避免使用它们。 因此,原始示例可以写成:

  • 我有下面的代码,其中计算最小和最大订单项目从列表并按预期工作。我想知道是否可以进一步重构/改进,使其更优化和高性能地处理数千或订单列表。 我故意不做 Collections.min(itemFrequencyMap.values()) 和 因为它需要对所有值进行两次迭代,然后再次循环遍历 以查找值和的条目。

  • 这个问题可能是封闭的,因为它听起来很模糊,但我真的问这个,因为我不知道或者我的数学背景不够。 我试图实现一个挑战,其中一部分挑战要求我计算矩阵的最小值和最大值。我对矩阵的实现及其操作没有任何问题,但是什么是矩阵的最小值和最大值?考虑到3x3矩阵是9个数中最小的数,最大的是最大的还是其他什么?

  • 我有一个分辨率为1,1的光栅图像。 我想将分辨率降低到4,4,但仍然具有构成新4,4像素的像素的最大值。 我可以通过使用降低分辨率: 但是,这将为您提供构成此新像素的每个像素的平均最大值。 我试图将光栅转换为矩阵,因此它采取以下形式: 是否有方法计算行1至4和列1至4内所有值的最大值? 这还需要应用于整个矩阵,该矩阵具有1000个行和列,返回到矩阵形式,如下所示:

  • 本文向大家介绍算法题:股票最大值。相关面试题,主要包含被问及算法题:股票最大值。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 最大利润无外乎就是计算后面的数字减去前面的数字得到的一个最大的差值; 求总体的最大差值,需要的数据:当前的最小值,当前的最大差值;遍历求解即可。 C++ 代码示例: