【问题标题】:How do I return current index of an element in java?如何在java中返回元素的当前索引?
【发布时间】:2020-02-27 11:33:35
【问题描述】:

一对位置[i, j] 具有i < jA[i] ≥ A[j] 的属性(即反转), 这样A[i] − A[j] 是 A 中所有反演中可能的最大值。

    class Main {
    static int[] diff(int arr[], int n){
     int index1=0;
     int index2=0;
     int maxdiff=0;
     int[] ans=new int[3];
     int i,j;
     for (i=0; i<n; ++i){
       for (j=n-1; j>i; --j){
         if(arr[i]>arr[j] && maxdiff<arr[i]-arr[j])
         maxdiff=arr[i]-arr[j];
         index1=i;
         index2=j;
         ans[0]=index1;
         ans[1]=index2; 
         ans[2]=maxdiff;

      }
     }
    return ans;

    }

     public static void main(String[] args) {
       Main max = new Main();
       int arr[]={1,20,2,6,11,16,8};
       int n=arr.length;
       int[] ans=max.diff(arr, n);
        System.out.println("i="+ans[0]);
        System.out.println("j=" + ans[1]);
        System.out.println(ans[2]);
      }
    }

如您所见,我想打印i=2j=3,因为arr[2]-arr[3] 是最大的反转,如果有人能给我一些建议,我将不胜感激。

【问题讨论】:

  • 当我运行这段代码时,它返回 i=5 和 j=6,我不知道那里出了什么问题,希望有人能帮助我
  • 你的意思是 i=1 和 j=2?
  • 这里不需要分治。我建议从头开始。它可以在一个数组传递中完成。跟踪 i 和 i + 1。一切顺利
  • 您可能想为您的 if(arr[i]>arr[j] && maxdiff
  • @GuangzheLi 如果我正确理解了这个问题,您需要一种算法,它可以将输出作为两个索引和最大差异 b/w 其中indexFirst &lt; indexSecond and array[indexFirst] &gt;= array[indexSecond]

标签: java arrays divide-and-conquer inversion


【解决方案1】:
public class Main {
static int[] diff(int arr[], int n){
 int index1=0;
 int index2=0;
 int maxdiff=0;
 int[] ans=new int[3];
 int i,j;
 for (i=0; i<n-1; ++i){
//   for (j=i+1; j>i; --j){
//     if(arr[i]>arr[j] && maxdiff<Math.abs(arr[i]-arr[j]))
//     maxdiff=Math.abs(arr[i]-arr[j]);
//     index1=i;
//     index2=j;
//     ans[0]=index1;
//     ans[1]=index2; 
//     ans[2]=maxdiff;
//
//  }
     if(maxdiff<Math.abs(arr[i]-arr[i+1]))
     {
         maxdiff=Math.abs(arr[i]-arr[i+1]);
         ans[0]=i;
         ans[1]=i+1;
         ans[2]=maxdiff;
     }
 }
return ans;

}

 public static void main(String[] args) {
   Main max = new Main();
   int arr[]={1,20,2,6,11,16,8};
   int n=arr.length;
   int[] ans=max.diff(arr, n);
    System.out.println("i="+ans[0]);
    System.out.println("j=" + ans[1]);
    System.out.println(ans[2]);
  }
}

【讨论】:

  • 嗨,我的朋友,你几乎得到了答案,但这是一个最大的反转问题(i>j 和同时 arr[i]
  • 哎呀谢谢伙计!我忽略了 if 语句后面的大括号,现在输出是 i=1 j=2,diff=18 这就是答案。还有一件事你知道如何以这种方式显示输出([1,2] 20 ) ,这是最好的答案
猜你喜欢
  • 2014-12-16
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2021-09-08
  • 2020-12-01
  • 1970-01-01
相关资源
最近更新 更多