python 几到算法题

来源:互联网 发布:淘宝店铺打客服电话 编辑:程序博客网 时间:2024/06/07 04:58

将字符串中空格长度大于1的空格变成一个空格, 时间复杂度O(N), 空间复杂度o(N)


[python] view plaincopyprint?
  1. def test1():  
  2.     sr = 'abcd abcde   abcd dd            abcd 123'  
  3.     sl = list(sr)  
  4.       
  5.     st = False  
  6.     i=j=0  
  7.     for x in sr:  
  8.         if x != ' ':  
  9.             st = False  
  10.             sl[i] = sl[j]   
  11.             i += 1  
  12.             j += 1  
  13.         elif st == False:  
  14.             st = True  
  15.             sl[i] = sl[j]   
  16.             i += 1  
  17.             j += 1  
  18.         else:  
  19.             j += 1  
  20.       
  21.     print sr  
  22.     print ''.join(sl[:i])  

matplotlib代码一例

[python] view plaincopyprint?
  1. #coding: utf8  
  2. import matplotlib.pyplot as plt  
  3. from datetime import datetime  
  4.   
  5. ###result.txt format  
  6. #2012-04-01_13:29:01 0.00, 0.01, 0.05 739928 1316020 64.01 129900 777072 832856 20.78 585612 574972 12 10682 17 ESTABLISHED 12 LISTEN 10703 TIME_WAIT  
  7. #2012-04-01_13:30:01 0.00, 0.01, 0.05 738440 1317508 64.08 129980 778240 832856 20.78 585912 575912 2 10622 25 ESTABLISHED 12 LISTEN 10631 TIME_WAIT  
  8. #2012-04-01_13:31:01 0.00, 0.01, 0.05 737820 1318128 64.11 130060 779016 832856 20.78 586056 576648 2 9295 2 ESTABLISHED 12 LISTEN 9292 TIME_WAIT  
  9. #2012-04-01_13:32:01 0.00, 0.01, 0.05 739192 1316756 64.05 130076 779016 832856 20.78 586056 576664 1 3532 2 ESTABLISHED 12 LISTEN 3528 TIME_WAIT  
  10. #2012-04-01_13:33:01 0.05, 0.03, 0.05 727396 1328552 64.62 130116 780128 881624 22.00 597060 577712 1 5 3 ESTABLISHED 12 LISTEN  
  11. ###  
  12.   
  13. time_lst = []  
  14. avg1_lst = []  
  15. avg5_lst = []  
  16. avg15_lst = []  
  17. memper_lst = []  
  18. commit_lst = []  
  19. netlink_lst = []  
  20.   
  21. establish_lst = []  
  22. listen_lst = []  
  23. timewait_lst = []  
  24.   
  25. def getlink(lst):  
  26.     if len(lst) <= 2:  
  27.         return int(lst[0]), 00  
  28.     if len(lst) <= 4:  
  29.         return int(lst[0]), int(lst[2]), 0  
  30.     if len(lst) >= 6:  
  31.         return int(lst[0]), int(lst[2]), int(lst[4])  
  32.   
  33. with open('result.txt''r') as fp:  
  34.     for line in fp:  
  35.         data = line.split(' ')  
  36.         ti, avg1, avg5, avg15, memfree, memused, memper, kbb, kbca, kbc, commit, ka, kina, netlink, dblink = data[:15]  
  37.         time_lst.append(datetime.strptime(ti, '%Y-%m-%d_%H:%M:%S'))  
  38.         avg1_lst.append(float(avg1[:-1])*100)  
  39.         avg5_lst.append(float(avg5[:-1])*100)  
  40.         avg15_lst.append(float(avg15)*100)  
  41.   
  42.         memper_lst.append(float(memper))  
  43.         commit_lst.append(float(commit))  
  44.   
  45.         netlink_lst.append(int(netlink))  
  46.         est, listen, tw = getlink(data[15:])  
  47.         establish_lst.append(est)  
  48.         listen_lst.append(listen)  
  49.         timewait_lst.append(tw)  
  50.   
  51. plt.figure(1)  
  52.   
  53. plt.subplot(211)  
  54. plt.title("System Load Average Figure")  
  55. plt.xlabel("Time Line")  
  56. plt.ylabel("System Load Average")  
  57. #plt.text(2, 6, r'red: 1 minute, blue: 5 minute, green: 15 minute', fontsize=15, style='italic',bbox={'facecolor':'red', 'alpha':0.5, 'pad':10})  
  58. plt.plot(time_lst, avg1_lst, 'r-',  time_lst, avg5_lst, 'b-', time_lst, avg15_lst, 'g-')  
  59.   
  60. plt.subplot(212)  
  61. plt.title("Memory Figure")  
  62. plt.xlabel("Time Line")  
  63. plt.ylabel("Memory Used Percentage")  
  64. plt.plot(time_lst, memper_lst, 'r-', time_lst, commit_lst, 'b-')  
  65.   
  66. plt.figure(2)  
  67. plt.title("NetWork Figure")  
  68. plt.xlabel("Time Line")  
  69. plt.ylabel("Link Number")  
  70. plt.plot(time_lst, netlink_lst, 'r-', time_lst, establish_lst, 'b-', time_lst, listen_lst, 'g-', time_lst, timewait_lst, 'y-')  
  71.   
  72. plt.show()  

原题大概是:
两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];
要求:
1.不准用除法运算
2.除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)
3.满足时间复杂度O(n),空间复杂度O(1)

[python] view plaincopyprint?
  1. a = [2,5,6,3,1,9]  
  2. print a  
  3.   
  4. b = map(lambda x: reduce( lambda i,j: i*j, a[:a.index(x)], 1) * reduce( lambda i,j : i*j, a[a.index(x)+1:], 1),  a)  
  5. print b  
  6.   
  7. c = [1]  
  8. for i in range(len(a)):  
  9.     if i == 0:  
  10.         continue  
  11.     c.append( a[i-1]*c[i-1])  
  12.   
  13. for i in range(len(c)):  
  14.     c[i] = c[i] * reduce(lambda i,j: i*j , a[i+1:], 1)  
  15.   
  16. print c  
  17.   
  18. d = [0 for x in a]  
  19. d[0] = 1  
  20. for i in range(1, len(a)):  
  21.     d[0] *= a[i-1]  
  22.     d[i] = d[0]  
  23.   
  24.   
  25.   
  26. d[0] = 1  
  27. for i in range(len(a)-20, -1):  
  28.     d[0] *= a[i+1]  
  29.     d[i] *= d[0]  
  30. d[0] *= a[1]  
  31. print d  

给出数n, 求0到n之间数字1出现的次数, 如f(13) = 6, f(10) = 2

[python] view plaincopyprint?
  1. import math  
  2.   
  3. def length11(n):  
  4.     return int( math.log10(n) )  
  5.   
  6. def first(n):  
  7.     return n/pow(10, length11(n))  
  8. def tail(n):  
  9.     return n % pow(10, length11(n))  
  10.   
  11. def f9(k):  
  12.     if k == 0:  
  13.         return 0  
  14.     return pow(10, k-1) + 10*f9(k-1)  
  15.   
  16. def f1(n):  
  17.     if first(n) == 1:  
  18.         return tail(n) + 1  
  19.     else:  
  20.         return pow(10, length11(n))  
  21.   
  22. def cal(n):  
  23.     if n== 0:  
  24.         return 0  
  25.     if n <= 9:  
  26.         return 1  
  27.     return f1(n) + first(n) * f9(length11(n))+ cal(tail(n))  
  28.   
  29.   
  30. print cal(213)  
  31. print cal(10)  
0 0