手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > python教程 > 文章 当前位置: python教程 > 文章

python题目及答案大一大学生蓝桥杯python题目python题目查询

时间:2022-07-31    点击: 次    来源:网络    作者:佚名 - 小 + 大

python题目及答案大一大学生蓝桥杯python题目python题目查询


下载地址

https://share.weiyun.com/OvviwGnZ


资料目录
Python练习集100题
100道Python面试题
Python100经典练习题
Python经典题目100道题
Python题库(已收录100道真题)
Python100例视频讲解课程
菜鸟教程Python教程100例
130道python练习题,涵盖基础内容的方方面面
Python考试题复习知识点试卷试题
PYTHON测试题和答案
python第一阶段考试题
Python经典面试题和答案解析
python期末考试复习试卷
python习题集大全(附答案解析)
老男孩Python全栈7期练习题(面试真题模拟)
尚观python第一阶段考试(面试真题模拟)
《Python程序设计基础与应用》习题答案
《Python快速编程入门》——课后题答案
Python编程基础张健 , 张良均课后习题及答案
Python程序设计基础及实践(慕课版)郭炜习题答案
Python程序设计基础习题答案与分析
python基础试题(含答案)

举例

最大子序和
一个列表里,都是整数,请到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
例如列表 [-2,1,-3,4,-1,2,1,-5,4], 其连续子数组[4,-1,2,1]的和最大为6.
思路分析
动态规划的算法,难与易只在一念之间,掌握了动态规划的精髓,代码轻易的就能写出,反之,则陷入到茫然之中。
动态规划的题目,其实,都可以用暴力破解,但真正的解法都非常的巧妙,说是巧妙,并不是投机取巧,而是掌握了动态规划的实质。
既然是动态,那么到底是什么在动呢?假设数组为k,令max_sum表示最大子数组之和,已知从k[i]到[j]的的和为pre_sum,暂且让max_sum = pre_sum,那么现在,我们要考虑是否应该让k[j+1]也加到这个子数组之中,多一个数,可能让max_sum更大哦。
如果pre_sum >=0 ,那么就让pre_sum += k[j+1],你一定会提出质疑,如果k[j+1]是负数,那么子数组之和不是更小了么?这里你忽略了,我已经让max_sum=pre_sum,所以我已经记录了最大值,pre_sum+= k[j+1]之后,的确变小了,但是max_sum还是之前的那个最大值,之所以要加k[j+1],因为k[j+2]有可能是一个很大的正数啊,所以要继续探索可能的最大子数组之和。那么假如k[j+2]也是负数呢,而且是很大的负数,以至于加上k[j+2]之后,pre_sum<0, 如果这样的事情发生,就按下面的方法操作
如果pre_sum < 0,不论k[j+1]是正还是负,k[j+1]加上pre_sum以后所得到的和都一定比k[j+1]更小,而我们要的是最大子序之和,所以这时,应该让max_sum等于pre_sum和k[j+1]中最大的那个,同时,让pre_sum = k[j+1],表示重新开始寻找和最大的子数组,如果不重新开始,带着pre_sum这个负数,难道对求和不是一个负面效果么。
谁在动呢,是pre_sum一直在动,我们规划的是一个子数组,期初,这个子数组里只有一个元素,就是数组的第一个元素k[0],随后就是考虑要不要把k[1]加进来,是否加进来,就按照上面的说的方法来进行。
示例代码
# coding=utf-8

def max_sub_sum(lst):
    max_sum = lst[0]
    pre_sum = lst[0]   # pre_sum是动态的,最初等于列表的第一个元素
    for i in range(1, len(lst)):
        # 前面的累积和如果小于0,当前值item加上一个负数只会比item更小
        # 因此将item赋值给pre_sum
        if pre_sum < 0:
            pre_sum = lst[i]
        else:
            # 前面的累积和是整数或者0,继续累加
            pre_sum += lst[i]

        if pre_sum > max_sum:
            max_sum = pre_sum

    return max_sum


if __name__ == "__main__":
    print max_sub_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4])
小结
既然是动态规划,就要找到那个变化的点,就这道题目而言,变化的点就是连续子数组之和小于0了,这个时候就必须从新开始寻找了,因为这个和已经是负数了,就如同一个包袱,就算后面的数都是正数,加上一个负数也终究比都是整数要小。

上一篇:python题目集pta编程题及答案计算机二级python题目是真题吗

下一篇:没有了

推荐阅读
声明 | 联系我们 | 关于我们
备案ICP编号  |   QQ:2151239526  |  地址:北京市东城区  |  电话:16605168200  |