标签:
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;
21 elif que[mid]>key:
22 high=mid;
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‘)
标签:
原文地址:http://www.cnblogs.com/fkissx/p/4390234.html