数组JAVA中整数的差异

时间:2016-03-27 01:59:16

标签: java arrays

我正在解决一个问题并陷入困境。这是问题所在。

你正沿着远足径散步。在这条远足径上,每公里都有高程标记。高程信息以整数数组表示。例如,如果高程数组为[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;
}

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

我建议你扔掉你写的东西(!)然后重新开始。

提示:将问题分解为两部分:

  1. 找到最长的上坡路段。提示:上坡部分是elevation[i - 1] < elevation[i]部分中所有i的部分。

  2. 查找给定部分中的高程变化。提示:如果你知道一个部分都处于上坡状态,那么有一个简单的方法可以做到这一点。

答案 1 :(得分:0)

简单逻辑迭代数组并比较并保存结果......

  1. 迭代数组并将当前元素与下一个元素进行比较
  2. 如果下一个元素具有更高的值,则会在结果中添加差异。
  3. 用于比较您拥有的结果的逻辑,并保存较高的值 3.1如果保存值,则将结果值与保存值进行比较 3.2如果结果更高,则替换保存结果..
  4. 返回已保存的值。

答案 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;
   }