数据结构与算法(下)
3.1.17 快速排序
- 排序
- 分治法
def quick_sort(lists, left, right): ''' 快速排序(升序)【不稳定】 原理: 分治递归,给定一组序列,把序列分为两部分,前部分的所有元素比后部分的所有元素小,然后再对前后两部分进行快速排序,递归该过程,直到所有记录 均有序为止。分三步走: (1)分解,array[m,...,n] 划分成 array1[m,..,k] 和 array2[k+1,...,n], 其中 array1 所有元素 < array2 所有元素 (2)递归求解,递归array1, array2 (3)合并,array[m,...,n] 自动排好序 :param lists: :param left: :param right: :return lists: ''' if left >= right: return lists key = lists[left] low = left high = right while left < right: while left < right and lists[right] >= key: right -= 1 lists[left] = lists[right] while left < right and lists[left] <= key: left += 1 lists[right] = lists[left] lists[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return lists if __name__ == '__main__': # 测试代码 lst = [5, 4, 3, 2, 1] # 调用归并排序 sorted_list = quick_sort(lst, 0, len(lst) - 1) print(sorted_list) # 输出:[1, 2, 3, 4, 5]
3.1.18 斐波那契数列
- 递归
- 循环
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…… 基于python用多种方式,找到前n项斐波那契数列或找到第n项斐波那契数列的值。
# (1)递归法 返回 idx 位的数值,缺点:只能返回最终返回值 def fib_recursion(idx): if idx <= 2: return 1 else: return fib_recursion(idx-1) + fib_recursion(idx-2) # (2)迭代法 返回 idx 位之前的fib数列 def fib_iteration(idx): lst = [] n,a,b = 0,0,1 while n < idx: lst.append(b) a,b = b, a+b n += 1 return lst # (3)生成器法 def fib_generator(idx): n,a,b = 0,0,1 while n < idx: yield b a,b = b, a+b n += 1 if __name__ == '__main__': idx = 6 # 递归法调用 numb = fib_recursion(idx) print(numb) # 输出: 8 # 迭代法调用 lst = fib_iteration(idx) print(lst) # 输出: [1, 1, 2, 3, 5, 8] # 生成器法 lst1 = fib_generator(idx) print(list(lst1)) # 输出: [1, 1, 2, 3, 5, 8]
3.1.18 丑数
- 动态规划
只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。一般地,认为1是第一个丑数,1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18是最前面的13个丑数
def ugly_num(n): # 边界值判
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
测试工作无非就是点点点,没有太深的技术难度?<br/> 开发转投测试岗,原以为自身的条件能轻松胜任测试岗却反被面试官虐?<br/> 测试岗究竟要准备哪些技术知识去应对面试?<br/> 如何才能在测试岗面试中做到游刃有余?<br/> <p> <span>本专刊从测试岗面试考察的知识点和能力出发,精选出经典的测试岗面试题,不仅给出面试的典型回答和考点分析,还会剖析知识点,将其讲清讲透,让你彻底领悟题目背后所考察的能力,帮你梳理复习测试岗的知识体系。</span> </p> <h3> <span><br /> </span><span><strong>专刊主要分为3大模块:</strong></span> </h3> <p> <span>1. 岗位校招情况介绍:</span> </p> <p> <span>将对整个测试岗位进行详细的介绍,包括测试岗位的分类、市场需求量、薪资情况和校招概况,都会逐一做介绍,让同学们能对测试岗位的校招情况有个大概的了解<br /> 2. 面试考点和面试题讲解:</span> </p> <p> <span>这是本章最为核心的部分,将会以面试题讲解的形式,不仅给出面试题参考答案,还会对考点进行分析,剖析其中的知识点,把知识点讲清讲透,帮助同学们梳理复习测试岗的知识体系。本章涉及的知识板块有:软件测试基础知识、测试用例设计、排查问题的思路、常用的测试工具、计算机操作系统、计算机网络、编程语言和常考的智力题。内容丰富,基本上涵盖了测试面试常考的知识点。<br /> 3. 求职经验分享:</span> </p> <p> <span>本章将详细讲解面试的注意事项:从面试前的准备、面试当天到面试结束收到offer整个过程,都会进行逐一讲解。</span> </p> <p> <span><br /> </span> </p> <h3> <span>专刊大纲:</span> </h3> <p> <span><img src="https://uploadfiles.nowcoder.com/images/20210625/691666214_1624592824918/B4749CDE6B040FF304C11BA36D1276D5" alt="" width="700" height="1692" title="" align="" /><br /> <br /> </span> </p> <h3> <span>购买须知:</span> </h3> <span>①订阅成功后,用户即可通过牛客网 PC 端、App 端享有永久阅读的权限;<br /> ②牛客专刊为虚拟内容服务,订阅成功后概不退款;<br /> ③在专刊阅读过程中,如有任何问题,可在文章评论区底部留言,或添加牛客求职导师,加入读者交流群;<br /> ④想成为牛客作者,请邮件联系pandengfeng@nowcoder.com,邮件主题【牛客作者+写作方向】,并附上个人简历一份及近期作品一份;<br /> ⑤牛客专刊版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任。<br /> </span> <p> <span>了解专刊更多详细信息,请扫码添加丸子老师微信~</span> </p> <p> <br /> </p> <p> <img src="https://uploadfiles.nowcoder.com/images/20210526/999991364_1622023901811/2E767EB5BD55BF57B67C8E5427B978D8" alt="" /> </p>