【发布时间】:2019-04-11 08:11:11
【问题描述】:
我们有一个评分数组,我们必须在这样一个范围内找到最大评分,这样我们就不能在一个数组中跳过一个或多个连续评分
Example-1: {9,-1,-3,-4,-5} output = 9 + -1 + -4 = 4
解释:我取了 9,我们必须取 -1 或 -3 我们不能直接跳到 -4,因为我们不能跳过 1 个或多个连续数字。
Example-2: {-1,-2,-3,-4,-5} output = -2 + -4 = -6
Example-3: {-3,2,-4,-1,-2,5} output = 2 + -1 + 5 = 6
Example-4: {9,-1,-3,4,5} output = 9 + -1 + 4 + 5 = 17
我尝试了下面的代码,但它在示例的情况下有效:2,3,4 但不是示例 1 在其他情况下同样失败。
static int maximizeRatings(int[] ratings) {
int current = 0;
boolean result = false;
for(int j=0; j<ratings.length;j++){
if(ratings[j]<0){
result = true;
}else{
result = false;
}
}
if(result){
return allnegatine(ratings);
}
for(int i=0; i<ratings.length;i++){
if(i == ratings.length-1){
if(ratings[i] > 0)
current += ratings[i];
}else{
if(ratings[i] >0 && ratings[i+1]>0){
current = ratings[i]+ratings[i+1];
i++;
}
if(ratings[i] > ratings[i+1]){
current += ratings[i];
}else{
current += ratings[i+1];
i++;
}
}
}
return current;
}
private static int allnegatine(int[] ratings) {
int current =0;
for(int i=0; i<ratings.length;i++){
if(ratings.length%2==0){
if(i%2 == 0)
current += ratings[i];
}else{
if(i%2!=0)
current += ratings[i];
}
}
return current;
}
在示例 1 等某些场景中没有被排除在外,我得到的是 -6 而不是 4,我正在尝试获取可以通过所有场景的正确代码。谢谢
【问题讨论】:
-
“我们不能跳过 1 个或多个连续数字”我真的不明白这一点。找到最大值时,您必须检查每个值,因为任何值都可能是最大值。那么,你为什么说你“不能跳过值”,暗示跳过一些可能是可取的?
-
我认为他实际上的意思是不能跳过超过 1 个连续数字,即在遍历数组时,一次最多可以跳转 1 个数组元素。是这样吗,Hitesh?
-
我完全不明白这些示例是如何设置的。比如哪些数字被取,哪些被跳过
-
这些输出是如何计算的?它应该是什么?这里有什么规则?这还不清楚...如果您试图找到最大值,则没有跳过元素之类的东西,也没有进行计算(例如 1,最大值为 9)。明确你想要什么
-
OP 想要的不是
max(set of numbers),而是max(sum(subset of numbers))
标签: java arrays algorithm data-structures