我正在尝试解决CodingBat上的问题MaxMirror


  我们将说数组中的“镜像”部分是一组连续的元素,因此在数组中的某处,同一组以相反的顺序出现。例如,{1,2,3,8,9,3,2,1}中最大的镜像部分为长度3({1,2,3}部分)。返回在给定数组中找到的最大镜像部分的大小。
  
  maxMirror({1,2,3,8,9,3,2,1})→3
  
  maxMirror({1,2,1,4})→3
  
  maxMirror({7,1,2,9,9,7,2,1})→2




解决条件:


没有其他辅助方法。
不要在数组下使用Java.util.Arrays.copyOf或任何其他实用程序
不要使用集合。


我得到的解决方案适用于除{7,7,7,7,6,6,7,7}以外的所有情况,它应该返回5但得到6。我在这里做错了什么?

尽管在CodingBat上运行时显示“所有正确”,但是否还表明CodingBat并未针对所有可能的情况进行检查?

public int maxMirror(int[] nums) {
  final int len=nums.length;
  if(len==0)
  return 0;
  int maxCount=1;
  boolean flag=false;

  for(int i=0;i<len;i++)
  {
     int tempCount=1;
     int count=i;

     for(int j=len-1;j>=0&&(count<len);j--)
     {
        if((nums[count]==nums[j])&&!(flag))
        {
          flag=true;
          count++;
          continue;
        }
        if((nums[count]==nums[j])&&(flag))
        {
          tempCount++;
          count++;
          maxCount=(tempCount>maxCount)?tempCount:maxCount;
         continue;
        }
        if(!(nums[i]==nums[j])&&(flag))
        {
          flag=false;
          count=i;
          tempCount=1;
          continue;
        }
        if((j==count)||(j-count)==1)
        {
          flag=false;
          break;
          }

      }
  }
      return maxCount;

}

最佳答案

该修复程序使外循环中的标志未设置为false修复程序不可见here

10-05 19:36