• 算法题汇总


    1、快速排序

    2、IP的有效值是1.0.0.1~255.255.255.255,写个程序参数是char*的IP,返
    回IP是否合法
    提示:IP不超过4位,是否每一位都在合法范围,是否包含非法字符

    3、一个字符串数组char*A[]={'china','chinese',chese',...},求这个数
    组中字符串的最长公共前缀

    4、求两个字符串的最大公共子串,例:‘abcdefg’和 ‘zxdef’最长公共
    子串为‘def’

    def find_lcsubstr(s1, s2):
     m=[[0 for i in range(len(s2)+1)] for j in range(len(s1)+1)] #生成0矩阵,为方便后续计算,比字符串长度多了一列
     mmax=0  #最长匹配的长度
     p=0 #最长匹配对应在s1中的最后一位
     for i in range(len(s1)):
     for j in range(len(s2)):
      if s1[i]==s2[j]:
      m[i+1][j+1]=m[i][j]+1
      if m[i+1][j+1]>mmax:
       mmax=m[i+1][j+1]
       p=i+1
     return s1[p-mmax:p],mmax  #返回最长子串及其长度  
    print find_lcsubstr('abcdfg','abdfg')
     
     
     
    #最长公共序列
    import numpy
    def find_lcseque(s1, s2):
     # 生成字符串长度加1的0矩阵,m用来保存对应位置匹配的结果
     m = [ [ 0 for x in range(len(s2)+1) ] for y in range(len(s1)+1) ]
     # d用来记录转移方向
     d = [ [ None for x in range(len(s2)+1) ] for y in range(len(s1)+1) ]  
     for p1 in range(len(s1)):
     for p2 in range(len(s2)):
      if s1[p1] == s2[p2]:      #字符匹配成功,则该位置的值为左上方的值加1
      m[p1+1][p2+1] = m[p1][p2]+1
      d[p1+1][p2+1] = 'ok'    
      elif m[p1+1][p2] > m[p1][p2+1]: #左值大于上值,则该位置的值为左值,并标记回溯时的方向
      m[p1+1][p2+1] = m[p1+1][p2]
      d[p1+1][p2+1] = 'left'    
      else:              #上值大于左值,则该位置的值为上值,并标记方向up
      m[p1+1][p2+1] = m[p1][p2+1
      d[p1+1][p2+1] = 'up'    
     (p1, p2) = (len(s1), len(s2))
     print numpy.array(d)
     s = []
     while m[p1][p2]:  #不为None时
     c = d[p1][p2]
     if c == 'ok'#匹配成功,插入该字符,并向左上角找下一个
      s.append(s1[p1-1])
      p1-=1
      p2-=1
     if c =='left': #根据标记,向左找下一个
      p2 -= 1
     if c == 'up'#根据标记,向上找下一个
      p1 -= 1
     s.reverse()
     return ''.join(s)
    print find_lcseque('abdfg','abcdfg')
     

    5、单向链表反序

    6、多个已序数组交集

    7、遍历二叉树

    8、对一篇文章中的单词按字母顺序排序

    9、找出字符串里第一个重复出现的字符‘afdgdfdadfg’

    10、对一个版本的字符串比较大小:1.2.2,1.0.1,1.3.2,排序

    11、字符串‘welcom to tidn&di’,编码输出其中的‘tidndi’

    第一种方法:

     t='welcome to tidn&di'

    r='tidndi'

    e=t[11:]

    w=e.replace('&','')
    print(w)

    第二种方法:

    w=t[11:15]+t[16:] 

    print(w)

    #冒泡排序
    def sot(x):
    for i in range(len(x)-1):
    for j in range(len(x)-1-i):
    if x[j]>x[j+1]:
    x[j],x[j+1]=x[j+1],x[j]
    return x

    #选择排序
    def sot(x):
    for i in range(len(x)):
    min=i
    for j in range(i+1,len(x)):
    if x[i]>x[j]:
    min=j
    t = x[min]
    x[min] = x[i]
    x[i] = t


    #插入排序
    def sot(x):
    for i in range(1,len(x)):
    j=i-1
    while j>=0:
    if x[j]>x[j+1]:
    x[j],x[j+1]=x[j+1],x[j]
    j=j-1
    else:
    break
    return x

     
    #快速排序(待确定)
    def sot(x):
    for i in range(1,len(x)):
    key=x[i]
    j=i-1
    while j>=0:
    if x[j]>key:
    x[j+1]=x[j]
    x[j]=key
    j=j-1
    else:
    break
    return x

    #快速排序
    def partion(nums,left,right):
    key = nums[left]
    while left < right:
    # right下标位置开始,向左边遍历,查找不大于基准数的元素
    while left < right and nums[right] >= key:
    right -= 1
    if left < right: # 找到小于准基数key的元素,然后交换nums[left],nums[right]
    nums[left],nums[right] = nums[right],nums[left]
    else: # left〉=right 跳出循环
    break
    # left下标位置开始,向右边遍历,查找不小于基准数的元素
    while left < right and nums[left] < key:
    left += 1
    if left < right: # 找到比基准数大的元素,然后交换nums[left],nums[right]
    nums[right],nums[left] = nums[left],nums[right]
    else: # left〉=right 跳出循环
    break
    return left #此时left==right 所以返回right也是可以的
    def quick_sort_standord(nums,left,right):
    if left < right:
    key_index = partion(nums,left,right)
    quick_sort_standord(nums,left,key_index)
    quick_sort_standord(nums,key_index+1,right)
    if __name__ == '__main__':
    nums = [5, 6, 4, 2, 3,1]
    print nums
    quick_sort_standord(nums,0,len(nums)-1)
    print nums
     



  • 相关阅读:
    ES6 数组下
    ES6 ---数组(上部分)
    ES6---函数
    ES6---字符串
    自适应网页设计(Responsive Web Design)
    HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?
    mysql潜在的危险kill
    shell脚本加密
    Linux安全知识总结
    nginx 解决400 bad request 的方法(转载)
  • 原文地址:https://www.cnblogs.com/jiaoxiaohui/p/10640465.html
Copyright © 2020-2023  润新知