华为面试题:判断字符串对称及数组升序

70、华为面试题:判断字符串对称及数组升序

(1)判断一字符串是不是对称的,如:abccba。

(2)用递归的方法判断整数组a[N]是不是升序排列。

方法一:

通过获取字符串长度,从头尾分别遍历,检验到汇合之前是否出现不同字符。

这种方式,需要遍历数组两次。

C语言实现:

#include
bool Judge(int arr[],int n){
    for(int j=0,i=n-1;j

方法二:归并

使用归并排序类似的拆解方法,将拆解的小块进行判断

Python实现:

lst1=[2,4,5,6,4,7]
lst2=[1,3,5,7,9]
flag=True
def judge(lst,start,end):
    global flag
    if flag==False:
        return 0
    if start==end:
        return lst[start]
    else:
        mid=int((start+end)/2)
        if lst[mid]>lst[mid+1]:
            flag=False
        left=judge(lst,start,mid)
        right=judge(lst,mid+1,end)
        if left
False
True

方法三:类遍历式递归

两两一组,逐步向后递归比较,思想上类似于遍历

Python实现:

lst1=[2,4,5,6,4,7]
lst2=[1,3,5,7,9]
def judge_(lst,s,e):
    if e
2 4
4 5
5 6
False
1 3
3 5
5 7
7 9
True

两种递归方法进行对比

lst1=[2,4,5,6,4,7,10,11,12,14,1,16]
lst2=[1,3,5,7,9,10,11,12,13,14,15,10]
time1=time.time()
print(judge_(lst1,0,1))
print(judge_(lst2,0,1))
time2=time.time()
judge(lst1,0,len(lst1)-1)
print(flag)
flag=True
judge(lst2,0,len(lst2)-1)
print(flag)
time3=time.time()
print('time cost : %.5f sec' %(time2-time1))
print('time cost : %.5f sec' %(time3-time2))
2 4
4 5
5 6
False
1 3
3 5
5 7
7 9
9 10
10 11
11 12
12 13
13 14
14 15
False
False
False
time cost : 0.14054 sec
time cost : 0.01562 sec

可以明显看出,方法三的递归时间是方法二的递归时间地十倍左右

所以可以得出结论,归并递归在效率上大于类似于遍历的递归,后者最好使用循环遍历进行实现。

你可能感兴趣的:(python,c++,c)