• 常见算法简介及python代码


    1.冒泡排序

    def bubblesort(nums):
        for i in range(len(nums)-1):
            for j in range(len(nums)-i-1):if nums[j]>nums[j+1]:
                       nums[j],nums[j+1] =nums[j+1],nums[j]
    
    
        return nums
    nums = [23,43,54,12,44,56,65]
    re = bubblesort(nums)
    print(re)

    简单解析: 从list首端逐个对数据进行两两比较,大的往后放,外层循环一次,会在list尾端得到一个最大值,类似于冒泡行为,每次循环的最大值都固定不动,循环到最后就会出现一组从小到大的数据。

    2.爬楼梯问题

    基本问题:对于n阶台阶,每次只能爬1阶或者2阶,问一共有多少种爬法?

    def climb(n):
        cclimb = [0,1,2]
        for i in range(3,n+1):
            cclimb.append(cclimb[i-1]+cclimb[i-2])
        print(cclimb)
        return  cclimb[n]
    
    re = climb(100)
    print(re)

    简单解析:可以以动态规划思想来入手,抽出子问题:n阶只可能是由n-1和n-2阶两种方式爬上来,所以把n-1和n-2的爬法相加即为n的爬法,边界条件:0阶为0,1阶为1,2阶为2;

    类似于斐波那契数列,可以用递归来求解,但这样会有很多重复计算,而动态规划会以空间换取时间的思想将每一步都记录下来,进而求解。

    递归可以试试,相当慢!

    斐波那契数列:[0,1,1,2,3,5,8,13,21.......]

    # 递归
    def f(n):
        if n<1:
            return 0
        if n<3:
            return 1
        return f(n-1)+f(n-2)
    print(f(100))

    3.钱币找零

    基本问题:有各面值钱币数个,不定,可能为0,支付某定额商品,求所支付钱币个数最少是多少

    def money():
        count = [3,0,2,1,0,3,5]
        value = [1,2,5,10,20,50,100]
        value.sort(reverse=True)
        count =count[::-1]
        money = 223
        re =0
        for i in value:
            num = min(money//i,count[value.index(i)])
            money-=num*i
            re+=num
        if  money >0:
            return -1
        return  re
    print(money())

    简单解析:在保证张数足够的情况下以最大面额逐个凑齐money

  • 相关阅读:
    iNeuOS工业互联网系统,一键部署,5分钟内开箱即用
    演讲的要义
    在MyBatis中实现动态表名
    Pandora Boot和Spring Boot
    java对象克隆以及深拷贝和浅拷贝
    超级快的端口扫描工具blackwater
    webgl智慧楼宇发光系列之线性采样下高斯模糊
    canvas可视化效果之内阴影效果
    图表绘制之RepeatNode的妙用
    【ECUG】十四年如一日,有这样一群初心不改的技术人
  • 原文地址:https://www.cnblogs.com/sima-3/p/14831375.html
Copyright © 2020-2023  润新知