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

在最佳时间复杂度下求未排序整数数组中两个相同数之间的最大差值[Java]

杜阳炎
2023-03-14
static int solution(int[] A) {
    int N = A.length;
    int result = 0;
    Map<Integer, List<Integer>> map = new TreeMap<>();
    for (int i = 0; i < N; i++) {
        List<Integer> list = map.getOrDefault(A[i], new ArrayList<>());
        list.add(i);
        map.put(A[i], list);

    }
    for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {
        List<Integer> list = map.get(entry.getKey());
        Collections.sort(list);
        result = Math.max(result, (list.get(list.size() - 1) - list.get(0)));
    }
    return result;
}

通过上述解决方案,我们可以解决这个问题,但它不是O(N)时间复杂度。因此,我正在寻找一个用Java解决这个问题的优化方案。

共有1个答案

殷功
2023-03-14

//收藏。排序(列表)//删除这一行会使O(NlogK)到O(N)的时间复杂度增加

  static int solution(int[] A) {
    int N = A.length;
    int result = 0;
    Map<Integer, List<Integer>> map = new HashMap<>();
    for (int i = 0; i < N; i++) {
        List<Integer> list = map.getOrDefault(A[i], new ArrayList<>());
        list.add(i);
        map.put(A[i], list);

    }
    for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {
        List<Integer> list = map.get(entry.getKey());
        result = Math.max(result, (list.get(list.size() - 1) - list.get(0)));
    }
    return result;
}
 类似资料:
  • 本文向大家介绍从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度相关面试题,主要包含被问及从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度时的应答技巧和注意事项,需要的朋友参考一下

  • 我正在尝试解决此问题: 一位物理教授给班上的学生做项目。学生们必须组成一个两人小组来做这个项目。教授让学生来决定队伍。一个班级的学生人数将是偶数。 每个学生都有自己的知识水平。它告诉每个学生有多少知识。一个团队的知识水平是两个学生知识水平的总和。 学生们决定组成小组,这样知识最高的团队和知识最低的团队之间的差异就最小了。 投入 输入的第一行将包含测试用例的数量t;在接下来的t行中,第一个数字是n,

  • 为什么选择排序的最佳案例时间复杂度为O(n^2),而插入排序和冒泡排序为O(n)?他们的平均时间是一样的。我不明白为什么最佳案例时间不同。如果你能帮忙,我将不胜感激。

  • 如果您有长度的排序数组,请查找其中最小的元素。这里有一些潜在的解决方案,有些涉及最小堆或二进制搜索,但我想知道使用QuickSelect的时间复杂度是多少。如果我们简单地将每个数组连接在一起,并在组合数组上使用quickselect。 Quickselect在一般情况下以线性时间运行,但是数组的组合确实会扩展搜索空间,但它比使用合并策略更有效,因为如果选择了好的枢轴,Quickselect必然允许

  • 本文向大家介绍手写代码:最大子数组问题(要求时间复杂度最佳)相关面试题,主要包含被问及手写代码:最大子数组问题(要求时间复杂度最佳)时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 线性时间算法:该算法在每次元素累加和小于0时,从下一个元素重新开始累加。实现代码如下: /* 时间复杂度O(n) 和最大的子序列的第一个元素肯定是正数 因为元素有正有负,因此子序列的最大和一定大于0 //如果累加

  • 具有矩阵A的: 我想计算所有行中两个相邻数字之间的最大和最小差异。然后过滤以仅限制相邻数字min小于4和7之间的行,最大值在6和12之间的行。输出应该返回无行。 对于以下矩阵: 结果应该是第1行