给定正整数数组,任务是擦除包含所有唯一元素的子数组。擦除子数组所得到的结果等于其元素的总和。
通过删除当前子数组之前或之后的项来返回当前子数组的最大和,我们可以通过仅删除一个子数组来获得最大和。
阵列ARR 被称为是一个子阵列一个如果它形成的连续子序列一个即如果它等于一个[1],A [L + 1],...,A [R]对于一些(升,r)。例如,
输入1 -
arr[ ] = { 1,2,4,5,6 }
输出-
17
说明-最佳子数组为{2,4,5,6}。
输入- 2 -
arr[ ]= {5,3,1,3,5,3,1,3,5}
输出-
9
说明-最佳子数组为{5,3,1}或{1,3,5}。
为了解决这个问题,我们将使用滑动窗口的概念。该技术说明了如何将嵌套循环转换为单个循环以减少时间复杂度。
在这种技术中,我们首先将初始化两个指针(左和右),并且将窗口的大小初始化为“ win”。在遍历数组时,我们将检查特定胜利的大小是否最大。如果发现最大值,则将其作为输出返回。
解决这个问题的方法,
输入一个正整数数组。
整数函数maximumUniqueSubarray(vector&arr)将数组作为输入。
取三个指针“ I”,“ j”和窗口大小“ win”,并遍历数组,查找HashSet中是否存在具有元素的当前窗口,然后移动窗口并再次检查另一个元素。如果不存在,则将其插入HashSet并减小窗口大小,以删除前一个元素。
在结果和窗口值中找到最大值。
返回结果。
#include<bits/stdc++.h> using namespace std; int maximumUniqueSubarray(vector<int>& arr) { int result = 0; unordered_set<int> hashset; for (int i = 0, j = 0, win = 0; j < arr.size(); j++) { html" target="_blank">while (hashset.find(arr[j]) != hashset.end()) { hashset.erase(arr[i]); win -= arr[i]; i++; } hashset.insert(arr[j]); win += arr[j]; result = max(result, win); } return result; } int main(){ vector<int>nums; nums<<5,3,1,3,5,3,1,3,5; cout<<maximumUniqueSubarray(nums)<<endl; return 0; }输出结果
运行上面的代码将生成如下输出:
9
问题内容: 类型擦除应该擦除所有泛型信息…如果是这种情况,那么像GSON这样的库如何使用泛型来确定反序列化为哪种类型? 例如 这将反序列 化为 将反序列化为 因此以某种方式在运行时使用通用信息。 问题答案: 类型擦除不会擦除所有类型信息。它不会从类,字段,返回类型和参数定义中将其删除。保留以下示例中的类型信息: 这是可以通过反射实现的。您可以检查给定的是否是该类,将其强制转换为该类并获取类型信息。
本文向大家介绍C ++中的最佳除法,包括了C ++中的最佳除法的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个正整数列表;相邻的整数将执行浮点除法。因此,例如[2,3,4]-> 2/3 /4。现在,我们可以在任意位置添加任意数量的括号以更改这些操作的优先级。我们应该找出如何添加括号以获得最大的结果,我们必须找到字符串格式的相应表达式。我们的表达式不应包含多余的括号。因此,如果输入类似于[1
我正在编写一个代码,用户会被问到:“有多少个标记?”然后他们输入他们提到的分数。然后,它打印出最大标记和最小标记。 我不是最擅长编码的,所以我没有方向去寻找循环中的最大值和最小值。我找到了他们能够输入标记的部分,但我不确定如何找到最大值和最小值。我查找了如何进行最大值和最小值,但它通常显示为在数组中查找最大值和最小值,这不是我想要做的。
问题内容: 我以为Java擦除会在编译时消除泛型类型,但是当我自己对其进行测试时,我意识到在Bytecode中有一些有关泛型类型的信息。 这是我的测试: 我写了2节课: 和 我编译了两个类,并在通用类的某个地方看到了这一行 在非泛型类中: 所以很明显我在字节码中有通用信息,那么这个擦除的东西是什么? 问题答案: 一些通用类型信息存储在属性中。请参阅JLS 4.8 和4.6以及JVM规范4.3.4。
下面的一些代码似乎太明显了,使用最右边的分支遍历树,因为这是所有最大值所在的位置。然而,我在RobertSedgewick的算法书中看到的这段代码有一些地方我不太懂。 在私有方法中,如果x的右子元素为null,为什么要返回左元素?根据我的理解,如果x没有正确的子节点,并且是我们可以访问的最正确的节点,那么x将是最大值。另外,我不明白什么时候在第二个方法的最后一行返回x。
我试过下面的程序。创建此程序的目的是了解有关堆栈大小的更多信息。 执行上述代码后,由于堆栈大小分配过大,程序崩溃。堆栈的最大可能大小是多少?是否为每个程序/计算机固定?可以增加吗? 我想知道是为了知识。如果有人能提供C/C中的例子,那将是非常有帮助的。