我正在尝试解决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
解决条件:
我得到的解决方案适用于所有情况,除了{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;
}
答案 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;
}