首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python从0到100(六):Python分支和循环结构的应用

一、程序的结构控制 单分支结构: 单分支结构是分支结构中最简单的一种方式,单分支结构只需要判断一个条件,根据这个条件是否成立来决定是否执行一段语句。...二分支结构: 二分支结构是根据条件判断的不同而选择不同执行路径的一种分支结构,二分支结构也只需要判断一个条件,根据这个条件来决定执行的语句块,成立执行if中的指令,不成立执行else中的语句。...多分支结构: 多分支结构是根据不同条件来选择语句块运行的一种分支结构,分支结构需要判断多个条件,根据判断当前条件是否成立来决定是否执行当前语句块,当所有条件都不成立时,执行else后的语句块。...Craps赌博游戏 我们设定游戏开始时玩家有1000元的赌注 游戏结束的条件是玩家破产(输光所有的赌注) from random import randint money = 1000 while money...斐波那契数列(Fibonacci sequence),通常也被称作黄金分割数列,是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)在《计算之书》中研究在理想假设条件下兔子成长率问题而引入的数列

45410

【Leetcode】动态规划 刷题训练(八)

,ABCDE也是一个等差数列 ---- 若想求以i为结尾的所有子数组的等差数列的个数, 而子数组是连续的,想要构成等差数列,至少使i位置与 i-1和i-2位置构成等差数列 ---- dp[i]分为两种情况...情况1:i i-1 i-2位置元素 可以构成等差数列 假设i-2位置元素为a,i-1位置元素为b,i位置元素为c 则三者之间的差值相同,即 c-b==b-a v以a b 为结尾的等差数列 ,由于...c 与a b 也能构成等差数列,所以 以 a b c 为结尾也为等差数列 而以 a b为结尾 就相当于 以 b为结尾 即dp[i-1](以i-1位置为结尾的所有等差数列的个数) 而a b c 属于等差数列...更正式地来说,当 arr 的子数组 A[i], A[i+1], ..., A[j] 满足仅满足下列条件时,我们称其为湍流子数组: 若 i 时, A[k] > A[k+...i位置处呈现上升趋势,只能单独1个构成子数组 即 f[i]=1 g[i]状态转移方程 假设i-1位置的元素的值为a,i位置的元素值为b ---- 情况1 a>b 此时正好呈现下降趋势, 符合g[i

21610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    百万考生分数如何排序 - 计数排序

    设置星标不迷路 其实计数排序是桶排序的一种特殊情况。 桶排序的核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。...考生的满分是 750 分,最小是 0 分,符合我们之前说的条件:数据范围小且是整数。我们可以划分为 751 个桶分别对应分数为 0 ~ 750 分数的考生。...分数与个数数组 可以知道,分数为 3 分的学生有 3 个, 分的学生有 4 个,所以成绩 = 3 分的学生在排序后的有序数组 sortedArray[8] 中的下标会在 4, 5, 6 的位置,...7,也就意味着包括自己在内,分数 ≤ 3 的考生有 7 位,表示在 sortedArray 中排在第七位,当把小强成绩放到 sortedArray 之后 ≤ 3 的成绩就剩下 6 个了,所以 countArray...代码实战 整个步骤: 查找数列最大值。 根据数列最大值确定 countArray 统计数组长度。 遍历原始数据填充统计数组,统计对应元素的个数。 统计数组做变形,后面的元素等于前面元素之和。

    1.2K10

    【Udacity并行计算课程笔记】- Lesson 4 Fundamental GPU Algorithms (Applications of Sort and Scan)

    更formal一点的说法如下,输入是 \(s_0,s_1,...\), 我们提前预设条件来得到 Predicate,即每个元素都会根据条件输出True或False。...所以就每个小扫描单独启动一个扫描内核不是很有意义,而且也浪费资源。相反我们可以把这些小扫描作为segment打包进一个大数组。然后利用一个特殊扫描运算符来单独扫描每一分段。...由下图可以看到如要使用归并排序,首先需要将1M的数据分成两半,即500K+500K。然后再重复分半,直到最后得到1M单独的元素。...成为以下的数列: 收集过程: 81, 22, 73, 93, 43, 14, 55, 65, 28, 39 接着再进行一次分配,这次是根据十位数来分配: 分配过程: 0 1 14 2 22 28...81, 93 这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。

    80230

    Python3 练习题 100例

    题目 1 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。...题目 2 企业发放的奖金根据利润提成。...斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。 题目 7 将一个列表的数据复制到另一个列表中。...题目 15 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 程序分析:(a>b)?a:b这是条件运算符的基本例子。...题目 24 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 请抓住分子与分母的变化规律。 题目 25 求1+2!+3!+...+20!的和。

    1.5K10

    手撕排序之快速排序

    加上等号后,还要加上判断条件左值要小于右值,以免极端条件出现,一直--或++,造成越界 最后交换key元素的值,我们应该记录key元素的下标,而不是key,因为key只是一个局部变量,交换key的值并不影响数组中的顺序...每次key的值大小顺序都在数列的中间左右 就是最后key每次交换元素都在数列的中间,明显的二分,也就造成了logN的算法。...,左边又形成了坑位,以此类推…… 直到左右遍历到同一个坑位时,将最先取出key的元素放到这个坑位,这样,单趟排序就完成了,然后也是递归,形成完整的排序。...最后循环结束的条件就是cur指针指向的元素已经超出数列范围,然后将prev指向的元素与key交换。 为何prev指向的元素一定比key元素小?...利用非递归完成快排 思想: 因为递归函数中的栈帧是创建在操作系统中的栈上,而栈上的空间较小,一般递归5000次左右,就会报错——StackOverflow(经典的栈溢出错误),所以我们不能过于依赖递归,

    8710

    Java课程主要内容回顾

    考试分数占比 卷A 单选题:30道,每题1分 判断题:10道,每题1分 程序阅读题:5道,每题6分 编程题:2道,每题15分 卷B 单选题:20道 判断题:10道 填空题:10道 成绩占比: 平时成绩:...选择结构(Selection Structure):根据条件选择性地执行代码块。主要有 if-else 语句、switch 语句等。根据条件的真假执行不同的代码分支。...循环结构(Loop Structure):重复执行一段代码,直到满足退出条件为止。主要有 for 循环、while 循环、do-while 循环等。根据条件重复执行代码块,直到条件不再满足。...Java编译器根据不同的方法签名来区分并调用适当的方法。 发生条件: 方法名称相同,但参数列表必须不同。 3、异同点: 相同点: 都涉及方法的名称和参数列表。 都可以让程序员提供不同的实现方式。...成员变量可以使用默认值是因为它们在对象创建时已经分配了内存并赋予了默认值。方法变量(局部变量)是在方法执行时才创建,没有默认值,必须明确赋值后才能使用。 多态 多态的前提条件是什么?

    10710

    漫画:什么是计数排序?

    然后从后向前遍历输入数列: 第一步,我们遍历成绩表最后一行的小绿: 小绿是95分,我们找到countArray下标是5的元素,值是4,代表小绿的成绩排名位置在第4位。...同时,我们给countArray下标是5的元素值减1,从4变成3,,代表着下次再遇到95分的成绩时,最终排名是第3。 ?...第二步,我们遍历成绩表倒数第二行的小白: 小白是94分,我们找到countArray下标是4的元素,值是2,代表小白的成绩排名位置在第2位。...同时,我们给countArray下标是5的元素值减1,从3变成2,,代表着下次再遇到95分的成绩时(实际上已经遇不到了),最终排名是第2。 ?...1.当数列最大最小值差距过大时,并不适用计数排序。 比如给定20个随机整数,范围在0到1亿之间,这时候如果使用计数排序,需要创建长度1亿的数组。不但严重浪费空间,而且时间复杂度也随之升高。

    66130

    漫画:什么是计数排序?

    然后从后向前遍历输入数列: 第一步,我们遍历成绩表最后一行的小绿: 小绿是95分,我们找到countArray下标是5的元素,值是4,代表小绿的成绩排名位置在第4位。...同时,我们给countArray下标是5的元素值减1,从4变成3,,代表着下次再遇到95分的成绩时,最终排名是第3。...第二步,我们遍历成绩表倒数第二行的小白: 小白是94分,我们找到countArray下标是4的元素,值是2,代表小白的成绩排名位置在第2位。...同时,我们给countArray下标是4的元素值减1,从2变成1,,代表着下次再遇到94分的成绩时(实际上已经遇不到了),最终排名是第1。...同时,我们给countArray下标是5的元素值减1,从3变成2,,代表着下次再遇到95分的成绩时(实际上已经遇不到了),最终排名是第2。

    28310

    查找算法

    查找算法 线性查找 二分查找 差值查找 斐波那契查找 鉴于在排序算法时, 搞得比较乱的情况, 导致查找不太方便....因此, 在写查找算法时, 我会将所有的东西都写在一起, 便于查找和阅读 在java中,我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 线性查找 思路: 如果在数组中发现满足条件的值...我们根据思路图来理解二分查找 ?...取其前三位数字的近似值是0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。..., 因此我们需要获取一个斐波那契数列 // 创建一个斐波那契数列 public static int[] fib(){ int[] f = new int[maxSize

    77810

    【Udacity并行计算课程笔记】- Lesson 4 Fundamental GPU Algorithms

    [hyfv61nk1j.png] 更formal一点的说法如下,输入是 $s_0,s_1,...$, 我们提前预设条件来得到 Predicate,即每个元素都会根据条件输出True或False。...所以就每个小扫描单独启动一个扫描内核不是很有意义,而且也浪费资源。相反我们可以把这些小扫描作为segment打包进一个大数组。然后利用一个特殊扫描运算符来单独扫描每一分段。...由下图可以看到如要使用归并排序,首先需要将1M的数据分成两半,即500K+500K。然后再重复分半,直到最后得到1M单独的元素。...成为以下的数列: 收集过程: 81, 22, 73, 93, 43, 14, 55, 65, 28, 39 接着再进行一次分配,这次是根据十位数来分配: 分配过程: 0 1 14 2 22 28 3..., 93 这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。

    1.2K10

    【c语言】一篇文章搞懂函数递归

    不过,我们好像遗漏了一个问题:0的阶乘是不是也是1?所以我们应该计算到0的阶乘为止,这样,用户输入0程序就不会出现问题了。...如果你还是难以理解,我们画一张图来显示它的详细流程: 程序前半部分逐层深入,从求5的阶乘深入到求0的阶乘,这个过程叫做递推,由于我们递归的限制条件是n==0,当计算到0的阶乘时,此层递归传入的参数刚好是...,我们就将这个四位数拆解为打印123的每一位,并且打印出4,当进入123作为参数的递归时,将其拆解为打印12的每一位并且打印出3,直到得到1,递归就不继续进行,逐层深入解决问题。...所谓斐波那契数列,就是说一个正整数数列,前两个数都是1,从第三个数开始,每一个数都是它之前的两个数之和。我们列举一下前几个数:1,1,2,3,5,8,13,21,34.........递归不是万能的,它可能出现运行效率低,栈溢出的情况。在编写程序时要根据实际情况进行思考是否使用递归。 到这里,想必你对递归已经有了新的认知了吧!

    14910

    什么是计数排序?

    然后从后向前遍历输入数列: 第一步,我们遍历成绩表最后一行的小绿: 小绿是95分,我们找到countArray下标是5的元素,值是4,代表小绿的成绩排名位置在第4位。...同时,我们给countArray下标是5的元素值减1,从4变成3,,代表着下次再遇到95分的成绩时,最终排名是第3。 ?...第二步,我们遍历成绩表倒数第二行的小白: 小白是94分,我们找到countArray下标是4的元素,值是2,代表小白的成绩排名位置在第2位。...同时,我们给countArray下标是5的元素值减1,从3变成2,,代表着下次再遇到95分的成绩时(实际上已经遇不到了),最终排名是第2。 ?...1.当数列最大最小值差距过大时,并不适用计数排序。 比如给定20个随机整数,范围在0到1亿之间,这时候如果使用计数排序,需要创建长度1亿的数组。不但严重浪费空间,而且时间复杂度也随之升高。

    54310

    【JAVA-Day32】精通Java函数:定义、调用和主函数的完整指南

    当函数仅负责一个任务时,出现问题时更容易进行故障排查和修复。 在编写函数时,考虑将函数划分为小块,每个块负责一个特定的功能。这样的函数更易于维护和重用,并且提供更好的代码组织结构。...解决可以分解成更小实例的数学或计算问题,如斐波那契数列或阶乘计算。 实现一些复杂的算法和数据结构,如快速排序和归并排序。 递归函数要小心使用,确保存在终止条件,以防止无限递归。...除零异常(ArithmeticException): 当尝试进行除零运算时抛出。要避免这种错误,需要在执行可能导致除零的运算前进行条件检查。...处理这些错误的方法包括添加条件检查、使用异常处理机制(try-catch块)和提供良好的错误信息。在编写函数时,应该考虑到这些潜在的错误情况,并采取适当的预防和处理措施。...在编写函数时,应该考虑到可能发生的异常情况,并根据需要添加适当的异常处理代码。这有助于提高程序的稳定性和可靠性,并使错误情况更容易诊断和修复。 8.

    10400

    Python 之初窥基础算法

    穷法算法的思想:在一个指定的数据范围之内,通过不停地判断直到查找到正确的答案。 可以用 2 句话概括:无循环无程序,无条件无逻辑。 现根据穷举算法的思路解决一个数学中常见的猜数字题目。...前面的斐波拉契数列也可以使用递归算法解决。比如说,想知道在第 12 位置的数字是多少。 递进线:求数列第 12位置的值,求助于第 11位置的值,然后再求助于第 10的值, 一至求助到第 1,2位置。...回溯法是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,但可以利用回溯的技术求解。回溯法是搜索算法中的一种控制策略。...二分查找的具体实现过程,请查阅我的博文:二分查找 快速排序的具体的实现过程,请查阅我的博文:快速排序 2.5 贪心算法思想 贪心算法总是做出在当前看来最好的选择,并从不整体最优考虑,只是局部最优秀。...后续会为某些经典算法单独开文,详细介绍其算法的微妙之处。 万变不离其宗,研究算法时即要做到能对各种算法独立分析,又要做到融合贯通。

    38430

    计数排序 的全网最详细的讲解

    接下来,我们创建输出数组sortedArray,长度和输入数列一致,然后从后向前遍历输入数列: 第一步,遍历成绩表最后一行的小绿:小绿是95分,找到countArray下标为5的元素,值是4,代表小绿的成绩排名是在第...同时给countArray下标是5的元素值减1,从4变成3,代表着下次再遇到95分时,最终排名是第3位。 ?...同时,给countArray下标是4的元素值减1,从2变成1,代表下次再遇到94分的成绩时(实际上已经遇不到了),最终排名是第1位。 ?...同时,给countArray下标是5的元素值减1,从3变成2,代表下次再遇到95分的成绩时(实际上已经遇不到了),最终排名是第2位。 ?...2.当数列元素不是整数时,并不适用于计数排序 如果数列中的元素都是小数,比如3.1415,或是0.00000001这样子,则无法创建对应的统计数组,这样显然无法进行计数排序。

    72610

    二分查找的延伸

    如果已经对二分查找能单独根据脑子里的想的写出代码的时候,lower_bound和upper_bound也能写出来。下面给出代码,读者可以尝试画个数组后按代码中算法推导出来。...在二手查找的问题中,需要元素不存在时返回-1,这样当left>right时[left,right]就不再是闭区间(失去比较的意义),因此可以作为元素不存在的判定规则。...第二 由于left==right时while循环终止,因此最后的返回值既可以是left,也可以是right。 最后 二分的初始区间的原则是应当能覆盖到所有可能返回的结果。...二分下界0可以确定,但是上界是n还是n-1?考虑到想要查询元素x有可能比序列中所有元素都要大,此时应该返回n(若n在数列中存在则它应该在的位置)。因此上界为n。...,right],两者相同即找到唯一位置 { mid = left + right / 2; if (条件成立) //条件成立,第一个满足条件的元素的位置

    45220

    牛客网剑指offer-1

    当其中某一个链表为空时,只需要返回另一个链表即可,这种情况需要单独讨论 当两个链表均不为空时,我们需要去比较结点两个链表中结点的大小,当l1的结点值小于l2的结点时,我们就需要将l2合并到l1上,把l2...当其中某一个链表为空时,只需要返回另一个链表即可,这种情况需要单独讨论 当两个链表均不为空时,我们需要去比较结点两个链表中结点的大小,当l1的结点值小于l2的结点时,我们就需要将l2合并到l1上,把l2...(前序遍历的第1位到根节点索引+1位,中序遍历的第0位到根节点的索引位) root.left = self.reConstructBinaryTree(pre[1:i + 1], tin...假设输入的数组的任意两个数字都互不相同。 分析 根据后序遍历的特点,我们可以知道数组中的最后宇哥元素时根节点,有了根节点,我们可以找到列表中最后一个小于根节点的值的元素。...分析 首先对特殊边界条件进行判断,然后分别递归左右子树,向下递归时需要使用目标值减去根节点的值,最后将左右子树的递归结果拼接为一个列表进行遍历,使用一个新列表去接受根节点加上遍历的元素值 class Solution

    1.3K10
    领券