算法
BeforeEasy
这个作者很懒,什么都没留下…
展开
-
前缀和应用-最接近0的子数组和
lintcode 139描述最接近零的子数组和给定一个整数数组,找到一个和最接近于零的子数组。返回第一个和最右一个指数。你的代码应该返回满足要求的子数组的起始位置和结束位置输入:[-3,1,1,-3,5]输出:[0,2]解释: [0,2], [1,3], [1,1], [2,2], [0,4] 都可以要求时间复杂度O(nlogn)分析暴力的想法是O(n^2)的方法来找出所有的组合,再判断是否接近0;进阶一点的想法是利用前缀和,O(n)的过程可以求0,i的和sum[i],sum[j原创 2020-05-11 20:17:51 · 232 阅读 · 0 评论 -
python 最大匹配分词
参考博客参考博客# given a dictli = ["北京大学","生前","来","应聘","大学生","前来","北京"]dic = {w:i for i,w in enumerate(li)}print(dic) forward max matching窗口从前面开始滑动,每次取maxlength匹配不上也是舍弃后面的# forward max matching# ...原创 2019-11-04 11:46:46 · 939 阅读 · 0 评论 -
python实现分词(普通&维特比算法)
普通方法思路:读入词典中的词,每个词对应一个概率;读入句子,得到所有可能的句子的划分,返回unigram得分最大的一个分割;其中得到所有可能的分割采用递归的方法,当前词在词典中,就继续递归划分后半段;概率原理:P(x1,x2,x3,xn)=P(x1)* P(x2)*…*P(xn)可以转化成-log的加法,返回最小值代码:#切割代码def seg_all(string):# ...原创 2019-11-03 23:13:11 · 1813 阅读 · 4 评论 -
动态规划专题 -最大子序列和、硬币找零、最长递增子序列、叠箱子、造桥
推荐网站:一个dp学习网站https://people.cs.clemson.edu/~bcdean/dp_practice/最大子序列和描述对于一个数组(有正有负),找到连续的A[i]…A[j]使其和最大可以采用动态规划的算法以M[j]为到下标j时最大的子序列和,那么:M[j] = max(M[j-1]+A[j], A[j])显然从M[j-1]阶段到M[j]阶段,只有这两种情况,比...原创 2019-11-03 16:15:17 · 227 阅读 · 0 评论 -
完数 VS 盈数 C++
描述题目描述 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述: 题目没有任何输入。 输出描述: 输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ……(ei为完数) G: g1 g2 g3 ...原创 2018-08-03 10:11:08 · 525 阅读 · 0 评论 -
CCF 2015 真题 持续更新
日期计算描述问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天。满足下面条件之一的是闰年: 1) 年份是4的整数倍,而且不是100的整数倍; 2) 年份是400的整数倍。 输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输入的第二行包含一个整数d,d在...原创 2018-09-05 20:00:26 · 491 阅读 · 0 评论 -
CCF 2016 真题 持续更新
中间数描述问题描述 在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。 给定一个整数序列,请找出这个整数序列的中间数的值。 输入格式 输入的第一行包含了一个整数n,表示整数序列中数的个数。 第二行包含n个正整数,依次表示a1, a2...原创 2018-09-06 20:09:40 · 635 阅读 · 0 评论 -
CCF 棋局评估 C++
描述问题描述 Alice和Bob正在玩井字棋游戏。 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先。当同一种棋子占据一行、一列或一条对角线的三个格子时,游戏结束,该种棋子的持有者获胜。当棋盘被填满的时候,游戏结束,双方平手。 Alice设计了一种对棋局评分的方法: - 对于Alice已经获胜的局面,评估...原创 2018-09-14 15:48:50 · 547 阅读 · 0 评论 -
快速排序相关——基本快排实现,优化,第K大数
快速排序//部分参考维基百科https://zh.wikipedia.org/wiki/目录快速排序基本介绍整体的思路代码实现第K大数字:最坏情况优化:与堆排序、归并排序的比较基本介绍在平均状况下,排序个项目要次比较。在最坏状况下则需要次比较,但这种状况并不常见。事实上,快速排序通常明显比其他算法更快,因为它的内部循环(inner loop)可以在大...原创 2018-12-13 23:56:20 · 576 阅读 · 0 评论 -
Top K问题
在大量数据(海量)中找到前K大或者前K小的数一般而言有两种思路:利用堆排序和利用快排,其中快排的效率会更高效一些 利用堆排序:堆排序的基本思路就是建立最大堆(最小堆),最大堆是父节点比任意子节点的值都要大,根节点是最大的值。堆排序的话就将全部的n个数组成最大堆,那么根节点就是最大的数,保留这个根节点;然后将最后一个叶子节点换到根节点上,调整整个堆使之重新成为最大堆,那么根节点就是第...原创 2018-12-22 20:17:11 · 168 阅读 · 0 评论 -
leetcode 三数之和 -python
描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]分析一开始的想法是,从i=0开...原创 2019-02-15 00:13:56 · 307 阅读 · 0 评论 -
leetcode 最接近的三数之和 python
描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).分析改一改之前的三数之和就可以了还是...原创 2019-02-15 14:31:56 · 297 阅读 · 0 评论 -
letcode 四数之和 python
描述给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:...原创 2019-02-15 23:27:52 · 270 阅读 · 0 评论 -
CCF 2014 真题 持续更新
相反数描述问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。 输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。 输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。 样例输入 5...原创 2018-09-05 16:10:09 · 412 阅读 · 1 评论 -
CCF 2017 真题 持续更新ing
分蛋糕描述问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k...原创 2018-09-07 23:39:02 · 1064 阅读 · 0 评论 -
Biorhythms --中国剩余定理
描述题目描述 Some people believe that there are three cycles in a person’s life that start the day he or she is born. These three cycles are the physical, emotional, and intellectual cycles, and they...原创 2018-08-18 11:00:51 · 326 阅读 · 0 评论 -
二叉树创建和遍历 C++
描述题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。 输入描述: 输入包括1行字符串,长度不超过100。 输出描述: 可能有多组测试数据,对于每组数据, 输出将输入字符...原创 2018-08-16 10:17:12 · 1578 阅读 · 0 评论 -
鸡兔同笼
描述题目描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。 输入描述: 每组测试数据占1行,每行一个正整数a (a < 32768) 输出描述: 输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开 如果没有满足要求的...原创 2018-08-19 10:49:57 · 333 阅读 · 0 评论 -
八皇后 -- 递归
描述题目描述 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2…b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。 给出一个数b,要求输出第...原创 2018-08-19 11:27:43 · 242 阅读 · 0 评论 -
位操作练习 --二进制循环左移
描述题目描述 给出两个不大于65535的非负整数,判断其中一个的16位二进制表示形式,是否能由另一个的16位二进制表示形式经过循环左移若干位而得到。 循环左移和普通左移的区别在于:最左边的那一位经过循环左移一位后就会被移到最右边去。比如: 1011 0000 0000 0001 经过循环左移一位后,变成 0110 0000 0000 0011, 若是循环左移2位,则变成 1100 0000 ...原创 2018-08-22 17:27:59 · 4593 阅读 · 0 评论 -
神奇的口袋--刚好装满背包的方法总数
描述题目描述 有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。 输入描述: 输入的第一行是正整数n (1 ...原创 2018-08-17 09:54:29 · 2265 阅读 · 0 评论 -
子串计算 -- map的用法
描述题目描述 给出一个01字符串(长度不超过100),求其每一个子串出现的次数。 输入描述: 输入包含多行,每行一个字符串。 输出描述: 对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。 示例1 输入 10101 输出 0 2 01 2 1 3 10 2 101 2分析确实是需要一小...原创 2018-08-17 10:30:41 · 612 阅读 · 0 评论 -
二叉树 -- 递归找节点数
描述题目描述 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那...原创 2018-08-20 17:26:10 · 562 阅读 · 0 评论 -
CCF 2013 真题持续更新
最大的矩形描述在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。输入格式 第一行包含一个整数n,即矩形的数量...原创 2018-09-04 10:34:04 · 250 阅读 · 0 评论 -
leetcode 括号生成
描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]分析:回溯法递归每次填入的要么是(要么是),当然,第一个肯定是(,并且)的数目不会超过(;记录左括号和右括号的数量,...原创 2019-02-10 21:59:16 · 475 阅读 · 0 评论 -
leetcode 删除排序数组中的重复项
这个的关键是用倒叙循环好过正序循环,不需要考虑删除后导致的数据索引的问题题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为...原创 2019-02-11 00:06:54 · 114 阅读 · 0 评论 -
leetCode 28实现strStr() Python KMP
描述实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “...原创 2019-03-19 23:53:56 · 357 阅读 · 0 评论 -
leetcode 77 组合 回溯 C++
描述给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinations著作权归领扣网络所有。商业转载请联系官方授...原创 2019-07-08 12:34:21 · 287 阅读 · 0 评论 -
LeetCode 子集 & 子集II
子集描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subset...原创 2019-07-04 10:25:10 · 287 阅读 · 0 评论 -
leetcode 140 单词拆分2 C++ 回溯
描述给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = “catsanddog”wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]...原创 2019-07-13 21:14:32 · 323 阅读 · 0 评论 -
Leetcode 211. 添加与搜索单词 - 数据结构设计 C++ 字典树 回溯
描述设计一个支持以下两种操作的数据结构:void addWord(word)bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。示例:addWord(“bad”)addWord(“dad”)addWord(“mad”)search(“pad”) -> falsesear...原创 2019-07-14 23:21:08 · 460 阅读 · 0 评论 -
LeetCode 212. 单词搜索 II 字典树 回溯 C++
描述给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = [“oath”,“pea”,“eat”,“rain”] and board =[[‘o’,‘...原创 2019-07-15 00:37:16 · 604 阅读 · 0 评论 -
leetcode 131 分隔回文串 C++ 回溯
描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-partitioning著作权归领扣网络所有。商业转载请联系官方授权,...原创 2019-07-10 19:15:30 · 428 阅读 · 0 评论 -
LeetCode 44 通配符匹配 C++ 双指针&动态规划
描述给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出...原创 2019-07-11 19:51:21 · 376 阅读 · 0 评论 -
leetcode 79 单词搜索 C++ 回溯
描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 ...原创 2019-07-12 10:05:32 · 703 阅读 · 0 评论 -
LeetCode 第k个排列 c++ 回溯
描述给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: ...原创 2019-07-07 23:22:43 · 484 阅读 · 0 评论 -
leetcode组合总和 II
描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[...原创 2019-07-01 17:08:19 · 128 阅读 · 0 评论 -
leetcode 39组合总和
描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。样例示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为...原创 2019-06-20 23:28:26 · 151 阅读 · 0 评论 -
Leetcode 31 下一个排列 python
描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1分析从最后一个开始找,找到第一个非升序的数,记录其位...原创 2019-03-20 21:32:01 · 196 阅读 · 0 评论 -
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 C++
描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10]...原创 2019-03-21 20:47:26 · 385 阅读 · 0 评论