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解决这个问题的优化方案。
//收藏。排序(列表)//删除这一行会使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行