查找整数数组中存在的整数的最大镜像[CodingBat riddle:MaxMirror]

时间:2014-06-25 15:38:09

标签: java arrays

我正在尝试解决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,7,2,1})→2


解决条件:

  1. 没有其他辅助方法。
  2. 不要使用Java.util.Arrays.copyOf或Arrays下的任何其他实用程序
  3. 不要使用收藏品。
  4. 我得到的解决方案适用于所有情况,除了{7,7,7,7,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;    
    
    }
    

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

` public int maxMirror(int[] arr){
        int i,j,temp,max,count;
        i=j=temp=max=count=0;
        while(i < arr.length-1){
            count=0;
            temp=i;
            j=arr.length-1;
            while(j >= temp){
                if(arr[temp] == arr[j]){
                     count++;
                     if(temp==j) count++;
                     temp++;
                }
                else if(count > 0) break;                
                if(max < count) max=count;
                j--;
            }
            i++;
        }
        return max;
 }`

答案 2 :(得分:0)

这对我有用,请尝试!

static int count=0;

     public static void main(String []args){


       int max=0;//char that hold max of the count
       int[] a= new int[]{1,2,3,4,3,2,1};//input
       int length=a.length;
        for(int i=0;i<=length-1;i++)
        {
            for(int j=i+1;j<=length-1;j++)
            {
                if(a[i]==a[j])//comparing each number with everother to find a match
                {

                    for(int k=i,l=j;k<=l;k++,l--)
                    //to find the length of the mirror
                    {
                        if(a[k]==a[l])
                        {
                            count++;
                        }
                        else{
                            break;//break if the mirror ends
                        }

                    }
                    if(count>max)
                        {
                            max=count;//updating max with the maximum of count

                        }
                        count=0;
                }
            }
        }
        System.out.println("the value of max mirror"+max);//value of max mirror
     }
}

答案 3 :(得分:-4)

public int maxMirror(int[] nums) {
 int count=0;
 int MAX=0;
  for(int i=0 ; i<nums.length ; i++)
      for(int j=nums.length-1; j>=0; j--)
         { 
          if(nums[i]==nums[j])
              { count=0;
                  for(int k=0 ; k<nums.length-i ; k++)
                  if((i+k<nums.length)&&(j-k>=0)&&(nums[i+k]==nums[j-k]))
                    count=count+1;
                   else break;
              }
            MAX=Math.max(MAX,count);  
          }

         return MAX;
}