查找max元素的索引

时间:2016-04-06 16:00:57

标签: java arrays recursion max

我无法获得找到最大元素的索引。我知道数组中的元素可以通过X [r]访问,其中r是索引,这就是我在这里所做的,但我似乎无法得到它只得到索引。

代码:

public class Max {

public static void main(String[] args) {
    int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7};
    System.out.println("max = " + maxArrayIndex(B, 0, B.length-1));
}

static int maxArrayIndex(int[] X, int p, int r) {
    int q = 0;
    if(p < r) {
       q = (p + r)/2;
       int maxLeft = maxArrayIndex(X, p, q);
       int maxRight = maxArrayIndex(X, q+1, r);
       int maxFinal = max(maxLeft, maxRight);
       return maxFinal;
      }
      return X[r];
   }

   static int max(int p , int r) {
       int maxIndex = 0;
       if(p > r) {
          maxIndex = p;
       } else {
           maxIndex = r;
       }
       return maxIndex;
     }
}

3 个答案:

答案 0 :(得分:3)

public class Max {
    public static void main(String[] args) {
        int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7};
        System.out.println("max = " + maxArrayIndex(B, 0, B.length - 1));
    }

    static int maxArrayIndex(int[] X, int p, int r) {
        int q = 0;
        if (p < r) {
            q = (p + r) / 2;
            int maxLeft = maxArrayIndex(X, p, q);
            int maxRight = maxArrayIndex(X, q + 1, r);
            int maxFinal = max(X, maxLeft, maxRight);
            return maxFinal;
        }
        // Changed from X[r] to r. This will return the index instead of the element.
        return r;
    }

    // Added X parameter.
    static int max(int[] X, int p, int r) {
        int maxIndex = 0;

        // Changed to compare the elements of the indexes,
        // instead of comparing the indexes themselves.
        if (X[p] > X[r]) {
            maxIndex = p;
        } else {
            maxIndex = r;
        }
        return maxIndex;
    }
}

建议的替代方案:

static int maxArrayIndex(int[] X, int p, int r) {
    int currentMaxIndex = 0;
    for (int i = 0; i < X.length; i++) {
        if(X[i] > X[currentMaxIndex]){
            currentMaxIndex = i;
        }
    }
    return currentMaxIndex;
}

答案 1 :(得分:2)

修改您的maxArrayIndex&amp;像这样的max方法,你必须再次在max块之外调用if,其余的代码都可以。

代码中存在问题:您必须将数组X传递给max方法以获取更大元素的索引,此时您只是找到更大的元素索引。

static int maxArrayIndex(int[] X, int p, int r) {
int q = 0;
if(p < r) {
   q = (p + r)/2;
   int maxLeft = maxArrayIndex(X, p, q);
   int maxRight = maxArrayIndex(X, q+1, r);
   return max(X,maxLeft, maxRight);
  }
  return max(X,p,r);
}


static int max(int X[],int p , int r) {
   int maxIndex = 0;
   if(X[p] > X[r]) {
      maxIndex = p;
   } 
   else {
      maxIndex = r;
   }
   return maxIndex;
 }

答案 2 :(得分:0)

似乎你永远不会检查数组中的元素,并在结尾处返回索引的值。

 static int max(int[] X , int maxIndex) {
    for (int i = 1; i <  X.length; i++){
       int currentNumber=  X[i];
       if ((currentNumber>  X[maxIndex])){
       maxIndex = i;
      }
    } 
    return maxIndex; 
} 

检查这个问题看起来你正在尝试做什么: How can I locate and print the index of a max value in an array?