- 博客(409)
- 资源 (34)
- 收藏
- 关注
原创 算法进化历程之灯泡开关
出场人物介绍小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序。她做事风风火火,对所有的事情都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨的小丫头。阿福:一个酷爱编程的8年级男生。大家都说他长得像国宝大熊猫,动作缓慢,憨态可掬。他做事情确实够慢的,连说话也慢条斯理,可是他一点也不担心,他常常说:“慢就是快,只要坚持下去,蜗牛也能爬...
2020-04-15 21:37:14
939
原创 算法进化历程之剪刀石头布
算法进化历程之剪刀石头布小美:阿福,你玩过剪刀石头布游戏吗?阿福:这算什么问题?谁还能没玩过剪刀石头布?要知道它可是一种世界闻名的猜拳游戏。它起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则(石头打剪刀,布包石头,剪刀剪布),使得剪刀石头布游戏没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得剪刀石头布这个古老的游...
2020-03-27 11:36:42
978
原创 Python算法之旅插入排序的故事
插入排序的故事话说计算机世界有一个诚实国,那里的人们不但诚实,而且尊老,每次排队都让年纪大的人排前面。有一次小胖到诚实国去旅游,肚子饿了想吃东西,发现一个烧饼店门前有人排着队,他就跟在队伍后面一起排队。没过多久,又来了一个人,站在小胖后面,并问他:“小伙子,你今年多大?”“26,怎么啦?”“26?那你得排在我后面,我今年38啦。”“为什么?明明是我先来的,先来后到你不懂吗?”“哈哈,先...
2020-03-24 15:07:02
457
原创 Python算法之旅冒泡排序的故事
冒泡排序的故事年关将近,丐帮各分舵派代表前往总舵向帮主进贡。只见帮主门前立了一列梅花桩,各分舵代表立于桩上,等待帮主接见。(梅花桩上的数字代表梅花桩的编号,代表身上的数字代表其布袋数量,布袋数量越多辈分越高)此时各代表所在位置如图示:总管传话,请辈分最高的代表站到最前面(右边)来,其他人依次按辈分大小排队,排队期间禁止喧哗,并不得掉下...
2020-03-21 23:04:32
421
原创 Python算法之旅字符串游戏之拼接字符串
字符串游戏之拼接字符串小美:阿福,最近老师教了我们一种很实用的Python数据结构——字符串,他说Python的字符串操作比其他编程语言都要简明自然呢。阿福:是啊,Python语言的最大特征就是简明易懂,代码和自然语言接近,容易理解。小美:老师给我们举了一个用字符串画五角星方阵的例子,我觉得很好玩,代码也很简洁呢。阿福...
2020-03-12 22:07:03
435
原创 81_搜索旋转排序数组 II
'''81_搜索旋转排序数组 II假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 ...
2020-02-21 16:42:47
461
原创 154_寻找旋转排序数组中的最小值 II
'''154_寻找旋转排序数组中的最小值 II假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0说明:这道题是 寻找旋转排序数组...
2020-02-21 16:42:05
315
原创 33_搜索旋转排序数组
'''33_搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5...
2020-02-21 16:41:05
265
原创 153_寻找旋转排序数组中的最小值
'''153_寻找旋转排序数组中的最小值假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0来源:力扣(LeetCo...
2020-02-21 16:39:56
266
原创 Python算法之旅元组的风暴之最长上升子序列
元组的风暴之最长上升子序列小美:还记得我们上次做的那道题目吗?求最长连续递增子序列的长度。阿福:记得啊,当时我们用了两种方法,分别是在a[i] <=a[i-1]和a[i] > a[i-1]时更新max_len,古老师还表扬我们了呢。小美:没错,当时你是出尽了风头啊。但是后来我又学会了一种新的方法,叫做动态规划,效率更高,代码也...
2020-02-21 14:46:20
384
原创 Python算法之旅元组的风暴之最长连续递增序列
元组的风暴之最长连续递增序列小美:前几天老师布置了一道题目:求最长连续递增子序列的长度。我感觉题目并不难,很快就做出来了。老师说我的代码有错误,可我没发现错误啊,我测试了好几组数据都是正确的。阿福:有这种事情?你把代码发给我看看。题目1:求最长连续递增子序列的长度。例如,在元组(1,9,2,5,7,3,4,6,8,0)中最长连续递增子序列为(3,4,6,8),其长度为4。函数功...
2020-02-21 14:43:38
318
原创 Python算法之旅列表的纷争之二进制编码
列表的纷争之二进制编码小美:最近数学老师给我们玩了有趣的猜年龄游戏,他显示了6张表格,你只要观察这6张表格,然后回答“是”与“不是”就可以了。老师可以根据你的回答猜出你的年龄是多少。阿福:真有这么厉害?我也想玩玩看。小美:好的。请看下图的6张表格,然后回答“是”与“不是”。准备好了吗?阿福:准备好了。小美:第1张表格中是否包含了你的年龄?阿福:不是。小美:第2张表格...
2020-02-18 10:50:09
335
原创 桶排序、计数排序和基数排序比较分析
一、桶排序1. 算法思想:桶排序是将待排序序列中处于相同值域的元素存入同一个桶中,即将一个数据表分割成许多桶,然后每个桶中的元素各自排序。它采用分治策略,是一种分布式的排序方法。2. 算法过程:(1)根据待排序序列中最大元素和最小元素的差值和映射规则,确定申请的桶个数;(2)遍历待排序序列,将每一个元素存储到对应的桶中;(3)分别对每一个桶中元素进行排序,并存储到原序列中,获得...
2020-01-19 23:15:52
461
原创 Python算法之旅字典的狂舞之石头剪刀布
字典的狂舞之石头剪刀布小美:阿福,你玩过石头剪刀布游戏吗?阿福:这是什么问题?谁还能没玩过石头剪刀布?要知道它可是一种世界闻名的猜拳游戏。它起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则(石头打剪刀,布包石头,剪刀剪布),使得石头剪刀布游戏没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪刀布这个古老的...
2020-01-14 21:04:53
421
原创 Python算法之旅列表的纷争之回文数列
出场人物介绍:小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序。她做事风风火火,对所有的事情都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨的小丫头。阿福:一个酷爱编程的8年级男生。大家都说他长得像国宝大熊猫,动作缓慢,憨态可掬。他做事情确实够慢的,连说话也慢条斯理,可是他一点也不担心,他常常说:“慢就是快,只要坚持下去,蜗牛也能...
2020-01-04 20:45:54
483
原创 Python算法之旅列表的纷争之双指针扫描 巧若拙
出场人物介绍:小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序。她做事风风火火,对所有的事情都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨的小丫头。阿福:一个酷爱编程的8年级男生。大家都说他长得像国宝大熊猫,动作缓慢,憨态可掬。他做事情确实够慢的,连说话也慢条斯理,可是他一点也不担心,他常常说:“慢就是快,只要坚持下去,蜗牛也能...
2020-01-02 22:54:38
288
原创 Python算法之旅字符串游戏之9路棋盘
阿福:小美,听说你学过海龟绘图,能帮我用turtle来画一张棋谱吗?小美:什么棋谱?阿福:就是一张9路围棋盘的棋谱,它的样子如图1所示:图1知识小贴士:turtle(海龟绘图)很适合用来引导孩子学习编程。最初来自于Wally Feurzig 和 Seymour Papert 于1966 年所创造的 Logo 编程语言。它在绘图区设置了一只想象中的小海龟(画面显示一个箭头...
2019-12-29 21:02:36
837
原创 Python算法之旅字符串游戏之无效的身份证
出场人物介绍小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序。她做事风风火火,对所有的事情都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨的小丫头。阿福:一个酷爱编程的8年级男生。大家都说他长得像国宝大熊猫,动作缓慢,憨态可掬。他做事情确实够慢的,连说话也慢条斯理,可是他一点也不担心,他常常说:“慢就是快,只要坚持下去,蜗牛也能爬...
2019-12-28 23:34:26
353
原创 Python算法之旅字符串游戏之身份证号的秘密
导语最近在力扣(LeetCode)网闲逛,发现很多题目的官方题解都是用Python语言来描述的,这说明大家已经逐渐认识到Python语言描述算法的优越性:它语法简明,内置函数丰富,表述直截了当,可以用最简明清晰的方式实现算法思想。现在的编程教育起点偏高,难度堪比奥数,令大量孩子望而却步,成了少数算法思维特别强的学生的“专利”。将来高中信息技术要学习Python语言,初中小学也要跟进,全面...
2019-12-28 23:30:18
853
原创 leetcode题解之反转链表
'''反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list...
2019-12-22 23:30:05
205
原创 leetcode题解之反转链表II
'''反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob...
2019-12-22 23:28:30
279
原创 leetcode题解之相交链表
'''编写一个程序,找到两个单链表相交的起始节点。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-t...
2019-12-20 22:23:04
226
原创 14_国名接龙游戏
'''FIFA 世界杯对足球爱好者而言是四年一度的盛事。下面我们拿2014 年世界杯参赛国的国名做个词语接龙游戏。不过,这里用的不是中文,而是英文字母(忽略大小写)。假设每个国名只能使用一次,求能连得最长的顺序,以及相应的国名个数。'''# 设置一个保存世界杯参赛国的数组country = ("Brazil", "Croatia", "Mexico", "Cameroon","S...
2019-12-18 16:04:30
460
原创 对分查找应用之列举满足条件的二元组集合
对分查找应用之列举满足条件的二元组集合余姚二中 梁见斌题目:列举满足条件的二元组集合。给定一个长度为n的整数数组a和一个目标值s,判断a中是否存在两个元素 a,b,使得a + b = s?找出所有满足条件且不重复的二元组(a, b)。注意:答案中不可以包含重复的二元组。例如,给定数组 a = (-1, 0, 1, 2, -1, 4, 2, 1, 3), s = 3,则满足要求的二元组集...
2019-12-17 22:36:26
636
原创 leetcode题解之三数之和
'''给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]来源:力扣(Leet...
2019-11-29 21:38:38
268
原创 leetcode题解之无重复字符的最长子串
'''给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是...
2019-11-28 20:04:07
244
原创 测时间函数示例
'''测时间函数示例'''import sysimport timedef timer(func, *pargs, **kargs): _reps = kargs.pop('_reps', 1000) start = time.perf_counter() for i in range(_reps): ret = func(*pargs, **k...
2019-11-27 23:33:29
289
原创 自定义zip函数
'''使用了4种方法模拟实现zip(*seqs)的功能'''def myzip(*seqs): seqs = [list(s) for s in seqs] res = [] while all(seqs): res.append(tuple(s.pop(0) for s in seqs)) return res def my...
2019-11-27 22:19:07
309
原创 leetcode题解之两数相加
'''给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> ...
2019-11-20 23:55:23
205
原创 leetcode题解之两数之和
'''给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(L...
2019-11-18 15:41:28
231
原创 丑数序列
'''一个数如果它的质因子只有2、3、5或7,那么我们称这个数为丑数。例如前20个丑数为[1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27]。现要求编程找出第n个丑数。'''def f(n): s = [1] a = b = c = d = 0 while len(s) < n: s.app...
2019-11-16 12:56:08
355
原创 使用移位代替交换操作的几个典型案例分析
使用移位代替交换操作的几个典型案例分析(巧若拙出品,欢迎转载,请注明出处)交换变量值是编程中的基本操作,它通常由3个赋值语句组成。正是因为每次交换操作都需要执行3条赋值语句,效率不算高,所以在有些情况下我们使用移位来代替交换操作,以提高工作效率。例1.插入排序。我们都知道经典的插入排序是采用向后移动元素的方式腾出插入位置,以便将被插入的元素a(i)放到正确的位置上去。事实上也可以用类似...
2019-10-25 11:04:42
901
1
原创 Python基础算法学习讲义之冒泡排序算法
冒泡排序算法基础冒泡排序例题1.使用冒泡排序算法对列表a升序排序。函数名:bubble_sort(a)参数表:a -- 待排序列表。返回值:该方法没有返回值,但是会对列表的对象进行升序排序。算法思想:外层循环累计排序轮数,同时控制待排序数组的右边界,即a[0..i]为待排序部分;内层循环扫描a[0..i-1],比较相邻元素,并通过交换元素值的方式将最大值冒泡到最右端def ...
2019-10-22 22:37:39
451
原创 Python基础算法学习讲义之选择排序算法
选择排序算法经典选择排序例题1.使用选择排序算法对列表a升序排序。函数名:selection_sort(a)参数表:a -- 待排序列表。返回值:该方法没有返回值,但是会对列表的对象进行升序排序。算法思想:外层循环控制待排序数组的左边界,即a[i:]为待排序部分;内层循环扫描a[i+1:],找到最小元素的下标def selection_sort(a): for i...
2019-10-22 22:36:36
528
原创 找出较轻的那个球
'''@Description: In User Settings Edit@Author: your name@Date: 2019-08-14 10:59:05@LastEditTime: 2019-08-14 16:47:34@LastEditors: Please set LastEditors给定n个球,其中只有1个球比其他球轻,请问至少比较多少次,可以找出该轻球...
2019-08-14 16:50:48
572
原创 如何更好地理解希尔排序算法
如何更好地理解希尔排序算法巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo)希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n ^2)的第一批算法之一。为什么希尔排序算法的效率会比简单插入排序高?如何理...
2019-08-08 09:59:00
403
原创 装球问题算法集锦
# -*- coding: utf-8 -*-"""Created on Thu Apr 4 09:19:06 2019@author: Administrator把m个同样的小球放在n个同样的盒子里,允许有的盒子空着不放,问共有多少种不同的分法?其中5,1,1和1,5,1 是同一种分法。算法分析:回溯算法:有2种思路,一种是确保后面的盒子中球不比前面的少,另一种是确保后面的...
2019-04-28 10:44:59
872
原创 两项竞赛总分
# -*- coding: utf-8 -*-"""Created on Wed Mar 27 19:42:56 2019@author: 巧若拙某学校使用“两项竞赛”对各班级的日常表现进行评比,规则如下:记录各个班级的纪律和卫生得分,根据得分分别计算纪律和卫生名次(得分越高排名越前,得分相同,名次也相同);再根据两项竞赛的名次计算总分(总分=纪律名次+卫生名次);最后计算总分的...
2019-03-27 23:28:32
502
原创 同余定理定理的两种解法
"""Created on Mon Feb 25 15:51:30 2019@author: Administrator先介绍两个公式:1.(A * B) mod k = (A mod K) * (B mod K) mod K;2.对于任何一个自然数p,若P为奇数有p=(p\2)*2+ 1,若P为偶数,则p=(p\2)*2+0以p=19为例,B^19=B^(2*9+1)=B * B^9...
2019-02-25 17:17:39
1499
原创 求解四宫数独
#!/usr/bin/python3#文件:求解四宫数独#作者:巧若拙#日期:2019年2月19日'''四宫数独规则:在4x4的格子中,根据已知数字,推理出所有剩余空格的数字,并满足每一行,每列,每一个宫内均含1到4的数字并且不重复,每道数独有且仅有唯一答案。'''def four_palace_sudoku(a, n): def answer(r, c): ...
2019-02-19 17:34:51
2153
1
C++程序设计陷阱
2016-07-06
程序员面试指导
2014-12-13
OpenGL入门教程(精)
2014-12-13
重构 改善既有代码的设计 中文版
2014-10-17
Effective C++改善程序与设计的55个具体做法 云风评注版
2014-10-14
编程之魂:与27位编程语言创始人对话
2014-10-14
改变未来的九大算法
2014-10-14
《( 如何求解问题——现代启发式方法》
2014-10-13
《奇思妙想:15位计算机天才及其重大发现》
2014-10-13
算法导论思考题
2014-10-11
计算机怎样解几何题
2014-10-11
遗传算法的数学基础
2014-10-11
柔性字符串匹配
2014-10-04
《算法之道》第二版(超清晰)
2014-10-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人