首页 > 其他 > 详细

去哪笔试两题

时间:2015-04-03 16:46:07      阅读:153      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!