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')