去哪笔试两题

1,a是一个有序数组,但经过向右移动数位,现在预在a中查找元素key的位置,如不存在,返回0。例如a=[5,6.7.8,1,2,3,4].

实现:

 1 #quna1
 2 def findPos(a,key):
 3     min=a[0];
 4     for i in range(len(a)):
 5         if a[i]<min:
 6             min=a[i];
 7             minpos=i;
 8     print min,minpos#找到起点,由此将数组分为两半
 9     if key>a[minpos-1]:
10         return 0;
11     elif key>a[-1]:
12         return pos(a[0:minpos],key)+1;
13     else:
14         return pos(a[minpos:],key)+minpos;
15 def pos(que,key):#二分查找,复杂度为o(logn)
16     low=0;high=len(que)-1;
17     while(low<=high):
18         mid=(low+high)/2;
19         if que[mid]<key:
20             low=mid+1;
21         elif que[mid]>key:
22             high=mid-1;
23         else:
24             return mid;
25     return low;
26 
27 a=[3,4,5,6,7,8,9,0,1,2,3]
28 print findPos(a,2)

2,字符串解密。例如‘ab2e3d’输出‘ababeeed’

实现:

 1 # quna2
 2 def decode(s):
 3     rs=''
 4     i=0;k=0;flag=0
 5     while i<len(s):
 6         if s[i].isdigit():
 7             d=i;
 8             while s[d].isdigit():#探测后面数是多少
 9                 if d<len(s)-1:d+=1;
10                 else:flag=1;break#如果超出s的长度标记flag
11             if flag:n=int(s[i:]);rs=rs+s[k:i]*n;break
12             else:n=int(s[i:d]);rs=rs+s[k:i]*n;i=d;k=d
13 
14         else:
15             i+=1
16     else:
17         rs=rs+s[k:]
18     return rs
19 print decode('3abc13dd2ee')
原文地址:https://www.cnblogs.com/fkissx/p/4390234.html