我正在尝试解决MaxMirror在CodingBat上的问题:
我们会说数组中的“镜像”部分是一组相邻的元素,在数组中的某个位置,相同的组以相反的顺序出现。例如,{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;
}
发布于 2014-07-16 13:35:14
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;
}
https://stackoverflow.com/questions/24413007
复制相似问题