DS 关于适用于简单测试用例但提交错误的数组的问题

问题描述

问题:给定一个数组 arr[] 表示 N 个塔的高度和一个正整数 K,您必须通过将它们增加或减少一次 K 来修改每个塔的高度。修改后高度为非负整数。 找出修改每个塔后最短和最长塔的高度可能的最小差异。

我的代码通过了基本的测试用例,所以我想我的逻辑是有效的。但是在提交 IndexOutOfBoundException 之后。请看代码并指出问题。 https://practice.geeksforgeeks.org/problems/minimize-the-heights/0

class Pair{
    private int index;
    private int value;
    Pair(int index,int value){
        this.index=index;
        this.value=value;
    }
   public int getIndex(){
       return this.index;
   }
   
   public int getValue(){
       return this.value;
   }
}

class Solution {
    int getMinDiff(int[] a,int n,int k) {
      ArrayList<Pair> possibleHeights =new ArrayList<Pair>();
      int [] visited = new int[n];
    //   for(int i=0;i<n;i++){
    //     System.out.println(a[i]-k);
    //   } 
      for(int i=0;i<n;i++){
          if((a[i]-k)>=0)
          possibleHeights.add(new Pair(i,a[i]-k));
          possibleHeights.add(new Pair(i,a[i]+k));
          visited[i]=0;
      } 
      
    //   for(int i=0;i<possibleHeights.size();i++){
    //       System.out.println(possibleHeights.get(i).getIndex()+"--"+possibleHeights.get(i).getValue());
    //   }
    //     System.out.println("---------");
      
      Collections.sort(possibleHeights,new Comparator<Pair>(){
          public int compare(Pair p1,Pair p2){
              return p1.getValue()-p2.getValue();
          }
      });
    //   for(int i=0;i<possibleHeights.size();i++){
    //       System.out.println(possibleHeights.get(i).getIndex()+"--"+possibleHeights.get(i).getValue());
    //   }
      
      int left=0,right=0,ele=0,size=possibleHeights.size();
      while(ele<n&&right<size&&left<size){
          if(visited[possibleHeights.get(right).getIndex()]==0)
          ele++;
          visited[possibleHeights.get(right).getIndex()]++;
          right++;
      }
      int ans = possibleHeights.get(right-1).getValue()- possibleHeights.get(left).getValue();
      while(right<size&&left<size){
          if(possibleHeights.get(left).getIndex()==1)
          ele--;
          visited[possibleHeights.get(left).getIndex()]--;
          left++;
            while(ele<n&&right<size){
          if(visited[possibleHeights.get(right).getIndex()]==0)
          ele++;
          visited[possibleHeights.get(right).getIndex()]++;
          right++;
      }
      int temp=possibleHeights.get(right-1).getValue()- possibleHeights.get(left).getValue();
        if(ele==n)      
        ans=ans<temp?ans:temp;
        else 
        break;
      }
      return ans;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)