算法进化历程
文章平均质量分 75
QiaoRuoZhuo
这个作者很懒,什么都没留下…
展开
-
leetcode题解之相交链表
'''编写一个程序,找到两个单链表相交的起始节点。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-t...原创 2019-12-20 22:23:04 · 189 阅读 · 0 评论 -
对分查找应用之列举满足条件的二元组集合
对分查找应用之列举满足条件的二元组集合余姚二中 梁见斌题目:列举满足条件的二元组集合。给定一个长度为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 · 601 阅读 · 0 评论 -
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 · 230 阅读 · 0 评论 -
leetcode题解之无重复字符的最长子串
'''给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是...原创 2019-11-28 20:04:07 · 210 阅读 · 0 评论 -
使用移位代替交换操作的几个典型案例分析
使用移位代替交换操作的几个典型案例分析(巧若拙出品,欢迎转载,请注明出处)交换变量值是编程中的基本操作,它通常由3个赋值语句组成。正是因为每次交换操作都需要执行3条赋值语句,效率不算高,所以在有些情况下我们使用移位来代替交换操作,以提高工作效率。例1.插入排序。我们都知道经典的插入排序是采用向后移动元素的方式腾出插入位置,以便将被插入的元素a(i)放到正确的位置上去。事实上也可以用类似...原创 2019-10-25 11:04:42 · 833 阅读 · 1 评论 -
完全背包问题
/* Name: 完全背包问题 Copyright: Author: Date: 25-07-17 16:58 Description: 完全背包是在N种物品中选取若干件(同一种物品可多次选取)放在空间为V的背包里, 每种物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解怎么装物品可使背包里物品总价值最大。动态规划(DP):1) 子问题定义:F[i原创 2017-07-25 22:16:54 · 399 阅读 · 0 评论 -
2718_移动路线
/* Name: 2718_移动路线 Author: 巧若拙 Description: 桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格中,蚂蚁从原创 2017-08-07 15:35:00 · 563 阅读 · 1 评论 -
动态规划专题之数塔问题
动态规划系列专题讲义专题一:数塔问题/* Name: 动态规划专题之数塔问题 Author: 巧若拙 Description:7625_三角形最佳路径问题描述:如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳原创 2017-08-07 15:41:14 · 1442 阅读 · 0 评论 -
1768_最大子矩阵
/* Name: 1768_最大子矩阵 Author: 巧若拙 描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。比如,如下4 * 4的矩阵0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2的最大子矩阵是9 2-4 1-1 8这个子矩阵的大小是15。输入输入是一个N * N的矩阵。输原创 2017-09-13 22:15:11 · 664 阅读 · 0 评论 -
快速排序算法析疑
/* Name: 快速排序算法析疑 Copyright: Author: 巧若拙 Date: 13-01-18 15:38 Description:快速排序算法 快速排序的基本思想是通过一趟排序将待排序列分割成独立的两个子序列,然后分别对这两个子序列分别快速排序,以达到整个序列有序。 假设待排序序列为a[low:high+1],从中任选一个元素值作为枢纽,再分别从左右两端向中间扫原创 2018-01-13 19:50:03 · 262 阅读 · 0 评论 -
求第k小元素的快速排序算法
/* Name: 第k小元素 Copyright: Author: Date: 13-04-17 15:28 Description: 求一列数中的第k小元素,利用分治的策略进行递归求解。 模仿快速排序法的思路,只不过每次只递归处理第k小元素所在的序列。 使用消除尾递归优化后效果更好。 */#include#include#include#include原创 2018-01-13 22:16:47 · 1094 阅读 · 0 评论 -
循环赛日程表
/* Name: 循环赛日程表 Copyright: Author: Date: 18-04-17 10:18 Description: 设有n=2k个选手参加比赛,要求设计一个满足一下要求的比赛日程表:(1)每个选手必须与其他的n-1个选手个比赛一次;(2)每个选手每天只能赛一次 。按此要求可以把比赛日程表设计成一个n行n-1列的二维表,其中第i行第j列表示第i个选原创 2017-04-18 11:22:07 · 1084 阅读 · 0 评论 -
666_放苹果
/* Name: 666_放苹果 Author: 巧若拙 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 输入 第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。 输出 对输入的每组数据M和原创 2017-07-20 13:15:45 · 649 阅读 · 0 评论 -
查找数组中的逆序对
/* Name: 查找数组中的逆序对 Copyright: Author: Date: 10-01-18 13:57 Description: 题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组中的元素个数。其中1 ≤n ≤40000原创 2018-01-10 15:21:10 · 675 阅读 · 0 评论 -
分组背包问题
/* Name: 分组背包问题 Copyright: Author: Date: 28-07-17 16:25 Description: 分组背包问题 :在n种物品中选取若干件放在容量为c的背包里,分别用P[i]和W[i]存储第i种物品的价值和重量。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解怎么装物品可使背包里物品总价值最大。 输入第一行3个数n,c和原创 2017-07-29 11:23:23 · 940 阅读 · 0 评论 -
混合背包问题
/* Name: 混合背包问题 Copyright: Author: Date: 28-07-17 15:11 Description: 混合背包问题 :在n种物品中选取若干件放在容量为c的背包里,分别用P[i]和W[i]存储第i种物品的价值和重量。有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)求解怎么装物品可使原创 2017-07-28 15:38:01 · 705 阅读 · 0 评论 -
矩阵连乘的问题
分别使用自顶向下和自底向上两种方式实现了动态规划算法。还给出了一种巧妙的输出方式。原创 2017-03-27 09:15:43 · 754 阅读 · 0 评论 -
1759_最长上升子序列
分别采用了逆序查找,顺序查找和二分查找三种方式原创 2017-07-22 21:48:33 · 338 阅读 · 0 评论 -
求最长不下降序列
/* Name: 求最长不下降序列 Copyright: Author: Date: 22-07-17 16:02 Description: 1759_最长上升子序列查看 提交 统计 提问总时间限制: 2000ms 内存限制: 65536kB描述一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ...原创 2017-07-22 22:22:25 · 540 阅读 · 0 评论 -
0-1背包和完全背包问题辨析
/* Name: 0-1背包和完全背包问题辨析 Copyright: Author: 巧若拙 Date: 26-07-17 20:39 Description: 0-1背包问题:在n种物品中选取若干件(同一种物品最多选一次)放在容量为c的背包里,分别用P[i]和W[i]存储第i种物品的价值和重量。求解怎么装物品可使背包里物品总价值最大。样例输入4 122 35 76原创 2017-07-26 22:41:03 · 1578 阅读 · 1 评论 -
动态规划专题之最大连续子序列之和
/* Name: 动态规划专题之最大连续子序列之和 Author: 巧若拙 Description: 最大连续子序列之和 给定K个整数的序列{ N1,N2, ..., NK },其任意连续子序列可表示为{Ni, Ni+1, ..., Nj }, 其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11,原创 2017-08-11 10:24:02 · 489 阅读 · 0 评论 -
数组专题讲义之简单排序算法
专题二 简单排序算法阅读代码,回答下列问题:#include using namespace std;const int M = 100;const int N = 10;int T[N+1];//桶排序专用数组(元素值为0-N的整数)void PrintArray(const int A[], int low, int high); //输出数组A中区域[low,high]的元原创 2017-08-18 17:16:02 · 829 阅读 · 0 评论 -
最大连续子序列之和练习最大m子段和
/* Name: 最大m子段和问题 Author: 巧若拙 Description: 最大m子段和问题 给定由 n个整数(可能为负整数)组成的序列a1,a2,a3,……,an,以及一个正整数 m,要求确定序列 a1,a2,a3,……,an的 m个不相交子段, 使这m个子段的总和达到最大,求出最大和。 输入:每个测试用例将以两个整数m和n开始, 紧随其后的是n个整数a1,原创 2017-08-12 15:07:40 · 3027 阅读 · 0 评论 -
多重背包问题
/* Name: 多重背包问题 Copyright: Author: Date: 28-07-17 10:24 Description: 多重背包问题:在n种物品中选取若干件(第i种物品最多选N[i]次)放在容量为c的背包里,分别用P[i]和W[i]存储第i种物品的价值和重量。求解怎么装物品可使背包里物品总价值最大。输入第一行2个数n和c,表示共有n种物品,背包总容量为c原创 2017-07-28 15:09:19 · 503 阅读 · 0 评论 -
动态规划专题之数塔问题
/* Name: 动态规划专题之数塔问题 Author: 巧若拙 Description:7625_三角形最佳路径问题描述:如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之原创 2017-08-05 22:45:04 · 437 阅读 · 0 评论 -
动态规划专题之石子合并
/* Name: 动态规划专题之石子合并 Author: 巧若拙 Description: 在一个操场上摆放着一排N堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将N堆石子合并成一堆的最小得分。输入描述 Input Description第一行是一个数N。1≤N≤100以下N行每行一个原创 2017-08-20 17:47:42 · 329 阅读 · 0 评论 -
放苹果算法集锦(允许盘中放置苹果为0个)
/* Name: 666_放苹果 Copyright: Author: Date: 31-07-17 21:22 Description: 666_放苹果查看 提交 统计 提问总时间限制: 1000ms 内存限制: 65536kB描述把N个同样的苹果放在M个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第...原创 2018-06-04 14:47:20 · 854 阅读 · 0 评论 -
放苹果问题集锦(每个盘子至少放1个苹果)
/* Name: 放苹果问题集锦(每个盘子至少放1个苹果) Copyright: Author: Date: 31-07-17 21:22 Description: 放苹果查看 提交 统计 提问总时间限制: 1000ms 内存限制: 65536kB描述把N个同样的苹果放在M个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同...原创 2018-06-05 16:19:49 · 2323 阅读 · 0 评论 -
深搜算法之石子划分问题
#!/usr/bin/python3#文件:深搜算法之石子划分问题#作者:巧若拙#日期:2019年1月4日'''给出n堆石子,以及每堆石子数。请将它们分为两堆,使得这两堆的总石子数差最小。输入n,以及每堆石子数,输出分为两堆后的最小差值。比如,n=4,四堆石子分别有13,6,8,14颗,则可以分为13+8和14+6的两堆,它们的最小差为1。分堆算法为(1)求得所有石子数total...原创 2019-01-04 16:40:57 · 729 阅读 · 0 评论 -
广搜算法之翻转棋子游戏
#!/usr/bin/python3#文件:广搜算法之翻转棋子游戏#作者:巧若拙#日期:2018年12月30日'''题目描述翻转游戏是这样玩的:有一张4*4的棋盘,在16个位置上每个位置放着一个棋子,棋子一面是黑色,另一面是白色,棋子或者白色面朝上,或者黑色面朝上。游戏的走法如下:每一步先选择一个位置,然后把该位置和上,下,左,右(不越界)相邻位置上的棋子翻转(白->黑,黑-...原创 2018-12-30 23:45:33 · 1912 阅读 · 0 评论 -
字符串匹配之BM算法
#!/usr/bin/python3# 文件名: 字符串匹配之BM算法# 作者:巧若拙# 时间:2019-1-15def bf(t, p): for left in range(len(t)-len(p)+1): #left指向当前t和p的左边界对齐的位置 j = len(p) - 1 #j指向当前比较的位置 while ...原创 2019-01-18 00:43:18 · 532 阅读 · 0 评论 -
KMP算法
#!/usr/bin/python3#文件:KMP算法#作者:巧若拙#日期:2018年12月30日def bf(t, p): i, j = 0, 0 while i < len(t) and j < len(p): if t[i] == p[j]: i, j = i + 1, j + 1 else: ...原创 2019-01-18 00:44:08 · 217 阅读 · 0 评论 -
字符串加密
#!/usr/bin/python3# 文件名: 字符串加密# 作者:巧若拙# 时间:2019-1-25'''描述:字符串加密。待加密的n个字符(仅由ASCII码字符构成,最多支持960个字符),加密方式如下:①产生一个3到6之间的随机整数k, 将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据...原创 2019-01-25 20:54:39 · 644 阅读 · 0 评论 -
最小距离最大值问题
#!/usr/bin/python3# 文件名: 最小距离最大值问题# 作者:巧若拙# 时间:2019-01-23'''最小距离最大值问题。描述:元组a是一个递增正整数序列(其中a[0]=0),求从a[1:]中删除m个元素以后,剩下的元素中最小距离的最大值。距离是指当前元素减去前一个元素的差。函数名:distance(a, m)参数表:a,存储了递增正整数序列的元组 ...原创 2019-01-27 16:20:21 · 4616 阅读 · 0 评论 -
装球问题算法集锦
# -*- 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 · 794 阅读 · 0 评论 -
如何更好地理解希尔排序算法
如何更好地理解希尔排序算法巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo)希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n ^2)的第一批算法之一。为什么希尔排序算法的效率会比简单插入排序高?如何理...原创 2019-08-08 09:59:00 · 349 阅读 · 0 评论 -
找出较轻的那个球
'''@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 · 516 阅读 · 0 评论 -
动态规划算法之公共子序列
#!/usr/bin/python3# 文件名: 动态规划算法之公共子序列# 作者:巧若拙# 时间:2019-01-02'''Description: 1808_公共子序列查看 提交 统计 提问总时间限制: 1000ms 内存限制: 65536kB描述我们称序列Z = < z1, z2, ..., zk >是序列X = < x1, x2, ..., xm &g...原创 2019-01-04 16:39:18 · 325 阅读 · 0 评论 -
动态规划算法之最长公共子串
#!/usr/bin/python3# 文件名: 动态规划算法之最长公共子串# 作者:巧若拙# 时间:2019-01-02'''两个字符串的最长公共子串与最长公共子序列的区别:最长公共子串要求在原字符串中是连续的,而子序列只需要保持相对顺序一致,并不要求连续。'''#穷举法:最直接的暴力穷举,需要三重循环,效率较低def LSS_length_1(n, m): #最大...原创 2019-01-04 16:38:07 · 697 阅读 · 0 评论 -
集合划分问题
/* Name: 集合划分问题 Copyright: Author: Date: 01-06-18 10:29 Description: 集合划分问题 题目描述设S是一个具有n个元素的集合,S=?a1,a2,……,an?S=?a1,a2,……,an?,现将S划分成k个满足下列条件的子集合S1,S2,……,SkS1,S2,……,Sk ,且满足:1.Si ≠ ?2.Si ∩ S...原创 2018-06-01 11:09:22 · 1279 阅读 · 1 评论