public class symm
{
/*
* Returns true if array A is symmetric.
* Returns false otherwise.
* n is the number of elements A contains.
*
* The running time of your algorithm is O( ).
* You may add a brief explanation here if you wish.
*/
public static boolean symmetric( int[] A, int n )
{
return symmHelper(A, n, 0);
}
private static boolean symmHelper(int[] A, int n, int i) {
if(n==1)
return true;
if((n==2) && (A[i] == A[n-1-i]))
return true;
if((i == n-1-i) && (A[i] == A[n-1-i] ))
return true;
if(A[i] == A[n-1-i] && i < n/2 )
return symmHelper(A, n, i+1);
return false;
}
}
测试用例: 除了第一个,我通过了所有的测试,但是当我运行第一个测试时,我得到了一个no。我认为问题在于中间有两个2。而且我并不确定代码是否能够简化。 时间复杂度是O(log n)吗?
5 8 2 2 8 5 是
10 7 50 16 20 16 50 7 10 是
5 8 5 是
1000 1000 是
6000 是
10 7 50 16 20 16 50 7 1000 否
10 7 50 16 20 16 50 700 10 否
10 7 50 16 20 16 5000 7 10 否
10 7 50 16 20 1600 50 7 10 否
10 7 50 16 1600 50 7 10 否
if((i == n-1-i) && (A[i] == A[n-1-i] )) return true;
是冗余的,可以简化为if(i == n-1-i) return true;
你甚至可以使用||
运算符将此情况与n == 1
情况结合起来。 - Tuxdude