我正在解决一个问题并陷入困境。这是问题所在。
你正沿着远足径散步。在这条远足径上,每公里都有高程标记。高程信息以整数数组表示。例如,如果高程数组为[100,50,20,30,50,40],则意味着在0公里处,高程为100米;在1公里处,海拔50米;在2公里处,海拔20米;在3公里处,海拔30米;在4公里处,海拔50米;在5公里处,海拔40米。
b)编写一个名为longestUphill的方法,该方法返回最长上坡路段的高程变化(以米为单位)。在上面的示例中,该方法应该返回30,因为最长的上坡路段是从2公里到20公里到4公里,50米。海拔变化为50 - 20 = 30米。
这是我到目前为止所拥有的。
public int longestUphill(int[] elevation)
{
int end,longest=0;
for(int i=0;i<elevation.length-1;i++){
end = i+1;
while(elevation[end]-elevation[i]>=0){
end++;
}
if(elevation[end]-elevation[i]>longest) longest = elevation[end]-elevation[i];
}
return longest;
}
有什么想法吗?
谢谢!
答案 0 :(得分:1)
我建议你扔掉你写的东西(!)然后重新开始。
提示:将问题分解为两部分:
找到最长的上坡路段。提示:上坡部分是elevation[i - 1] < elevation[i]
部分中所有i
的部分。
查找给定部分中的高程变化。提示:如果你知道一个部分都处于上坡状态,那么有一个简单的方法可以做到这一点。
答案 1 :(得分:0)
简单逻辑迭代数组并比较并保存结果......
答案 2 :(得分:0)
以下是您的回答......我认为这就是您所期待的! XD
public static int longestUphill(int[] elevation){
int longest=0;
for(int i=0;i<elevation.length-1;i++){
if(elevation[i]<elevation[i+1]){
int temp= elevation[i+1]-elevation[i];
for(int j=i+1;j<elevation.length-1;j++){
if(elevation[j]<elevation[j+1]){
temp += elevation[j+1]-elevation[j];
}
else{
if(longest<temp)
longest= temp;
i=j;
break;
}
}
}
}
return longest;
}
嗯......想法是迭代高程数组并开始递增最长变量,而实际值低于下一个。如果下一个低于实际值(另一个孔,上坡)用j值更新i,那么我们不会在主循环中再次分析先前由j循环分析的内容。
答案 3 :(得分:0)
for (int i=0;i<elevation.length-1;i++){
if(elevation[i] < elevation[i+1]){
temp += (elevation[i+1] - elevation[i]);
}
它基本上是这样的: 是当前元素&lt;比下一个?如果是这样,那么总结它们之间的差异并将其保存到temp var中,这只是一个临时变量。
else {
if(result<temp)
result = temp;
temp = 0;
}
如果满足第一个条件,那么我们将结果与temp进行比较,初始值为0,如果temp>结果我们将其保存到结果中并将temp变量重置为0。
return (result<temp)?temp:result;
最后,我们返回最高的上坡,将实际结果与temp进行比较,将temp设置为返回最大值。
public static int[] arr={100,50,20,30,50,40};
public static int longestUphill(int[] elevation){
int temp=0,result=0;
for (int i=0;i<elevation.length-1;i++){
if(elevation[i] < elevation[i+1]){
temp += (elevation[i+1] - elevation[i]);
}
else {
if(result<temp)
result = temp;
temp = 0;
}
}
return (result<temp)?temp:result;
}