Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 求A[J]+;的最大值A[I]_Java_Arrays_Algorithm_Max - Fatal编程技术网

Java 求A[J]+;的最大值A[I]

Java 求A[J]+;的最大值A[I],java,arrays,algorithm,max,Java,Arrays,Algorithm,Max,下周我就要期末考试了,我正在复习旧笔记和家庭作业/考试,努力学习。在我的第二个家庭作业中,我有一个问题我做错了,我只是不知道到底该做什么。问题是: 设计采用正数“a”数组的高效算法,并确定: A.a[j]+a[i]的最大值,其中j>或=至i。 Ba[j]-a[i]的最大值,j>或=至i 我不需要实际的代码,只需要一些伪代码和它的运行时间 我认为有效的方法是: 查找第一个、第二个和第三个最大值和最小值。 然后做: A.第一个最大值a(j)+第二个最大值a(i),对于j>=i。 B第一个最大值a(j

下周我就要期末考试了,我正在复习旧笔记和家庭作业/考试,努力学习。在我的第二个家庭作业中,我有一个问题我做错了,我只是不知道到底该做什么。问题是:

设计采用正数“a”数组的高效算法,并确定: A.a[j]+a[i]的最大值,其中j>或=至i。 Ba[j]-a[i]的最大值,j>或=至i

我不需要实际的代码,只需要一些伪代码和它的运行时间

我认为有效的方法是:

查找第一个、第二个和第三个最大值和最小值。 然后做: A.第一个最大值a(j)+第二个最大值a(i),对于j>=i。 B第一个最大值a(j)-第一个最小值a(i),对于j>=i

然后,如果上述条件失败,只需重复第二个最大值和最小值

我不知道为什么我不能对这件事耿耿于怀。我知道j可以等于I,所以我的答案会得出a部分不正确的结果。对于b部分,假设我有一个数组[89 | 90 | 1 | 2 | 3 | 4 | 5],它会变成90-1=89,但它应该是5-1=4。我甚至没有考虑运行时间,因为那部分是错误的


任何帮助或提示都会很好。谢谢大家!

a。a[j]+a[i]是直截了当的,它只有2*的最大值,因为j可以等于i,可以在
O(N)

b。a[j]-a[i]在这种情况下,我们需要一点动态规划来得到O(N)。下面是一种在O(N)中执行此操作的方法:-

建立一个数组,使得max[i]表示子数组a[i到n]中的最大元素

 max[n] = a[n]        
 for(i=n-1;i>=1;i--) 
    max[i] = maximum(max[i+1],a[i]);
然后为将成为您的
max a[j]-a[i]
的所有i查找最大值
(max[i]-a[i])


编辑:刚刚意识到不需要维护数组max[],您可以在使用之前的值计算max[i]的同时计算max[i]-a[i]。a[i]+a[j]的最大值是求数组中的最大值和第二大值,这很简单,时间复杂度为O(N)

b。为了最大化a[j]-a[i](j>=i),对于每个j,可能的最优解将是a[j]-j之前的最小值,因此您只需要保持该值并更新最佳解

mmin = a[0];
ans = 0;
for (int j = 0; j < length(a); ++j){
    mmin = min(a[j], mmin);
    ans = max(ans, a[j] - mmin);
}
return ans;
mmin=a[0];
ans=0;
对于(int j=0;j<长度(a);++j){
mmin=min(a[j],mmin);
ans=最大值(ans,a[j]-mmin);
}
返回ans;

它也是O(N)。

第一个元素肯定是最大元素的两倍?与我的解决方案相反。也谢谢!你的解决方案和notbad都有道理。我不知道我怎么没拿到a部分。