python-小算法


一、二分查找-【算法设计】

lst = [1, 2, 4, 6, 6, 8, 9, 12, 34, 56, 76, 99]
fir = 0
la = len(lst)-1             # 列表下标减一, 避免溢出
item = 56                   # 存储一个要查找的值
find = False                # 作用:标注,便于下面 代码的进行
while fir <= la and not find:
    mid = (fir+la)//2       # 一定要用//, 不然会存在float
    if lst[mid] == item:    # 若中间那个数刚好是要查找的,直接输出
        find = True
        break
    elif lst[mid] > item:
        la = mid-1
    else:
        fir = mid+1
if find:                # 符合我们要就查找的内容
    print("找到数据项,在%d位置,要查找的数据是%d" % (mid, lst[mid]))
else:
    print("要找的数据%d不在我们的列表中" % item)


二、约瑟夫问题

n = int(input())        # 输入总共的人数
m = int(input())        # 每隔多少人出局一个
people = []             # 存储空列表
for i in range(n):      # 遍历多少人
    people.append(True) # 全部人数均标注为True
# print(people)         # 验证已有的人数是否正确
res = []                # 出局的人编号存储列表
i = 1
while any(people):      # 只要列表中的元素有一个为True,则为True
    for x, y in enumerate(people):      # enumerate(list) 下标:x  元素:y(value)
        if y:
            if i == m:
                people[x] = False       # 符合要求的人退出
                res.append(x+1)         # 下标加1
                i = 1                   # 退出一个
            else:
                i += 1                  # 一个个退出


print(res)
print("出局顺序:", res[:-1])            # 切片,留下最后一人
print("活下来的人是", res[-1])            # 最后未出局的编号

也许我接触代码不是很早,但我会一直坚持,毕竟有时候坚持真的会有一个意想不到的结果,加油,你也可以的!


算法小抄-个人部分(知识点)总结:

1、 动态规划问题的一般形式就是求最值

求解动态规划的核心问题是穷举

动态规划三要素:1、重叠子问题;2最优子结构;3、状态转移方程


每日一言

成功并不是非得成名,它是一种结果,更是一个过程,一个不断挑战自我、战胜自我的过程。

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值