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);
}
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;
}
我使用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 输出: 我的代码能用吗?有没有我的代码失败的情况?你能为这个挑战提供一个更好的算法吗?