算法训练
给你糖别哭
在路上!
展开
-
字符串匹配——KMP算法
前段时间被问了字符串匹配的问题,用的是暴力,一直想填KMP的坑,这篇文章就记录一下,方便你我他,希望能讲清楚。概念本篇文章的一些约束说明,可能与其他文章不一样,但是原理一样的~前缀:对于一个字符串s,从第一个字符开始的子串,长度不超过s的一半。后缀:对于一个字符串s,以最后一个字符结尾的子串,长度不超过s的一半。最长相同前后缀 :对于一个字符串s,其前缀子串与后缀子串相同,...原创 2019-06-20 00:41:09 · 484 阅读 · 0 评论 -
最小编辑距离
最近在学算法,这个动态规划题目比较有意思,似乎现在的机器翻译和语音识别也会用到它。也有一定的难度,在leetcode上是困难难度。题目给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = “horse”, word2 = “r...原创 2019-06-10 20:11:38 · 347 阅读 · 0 评论 -
岛屿数量
题目给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3来源:力扣(LeetCode)链接:htt...原创 2019-07-01 21:39:47 · 6281 阅读 · 0 评论 -
每日温度
题目根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温...原创 2019-07-01 22:38:49 · 152 阅读 · 0 评论 -
打开转盘锁
题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨...原创 2019-07-01 23:15:20 · 470 阅读 · 0 评论 -
目标和
题目给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 =...原创 2019-07-03 22:20:40 · 124 阅读 · 0 评论 -
二叉树的前序遍历(递归+迭代)
题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归递归确实简单,随便写一个。/** * Definition for a binary tree node. * public class TreeNode ...原创 2019-07-15 16:28:23 · 231 阅读 · 0 评论 -
二叉树的中序遍历(递归+迭代)
题目给定一个二叉树,返回它的 中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归/** * Definition for a binary tree node. * public class TreeNode { * int val;...原创 2019-07-15 17:39:22 · 298 阅读 · 1 评论 -
二叉树的后序遍历(递归+迭代)
题目给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归/** * Definition for a binary tree node. * public class TreeNode { * int v...原创 2019-07-15 23:40:45 · 694 阅读 · 0 评论 -
对称二叉树(递归+迭代)
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法解决这个问题...原创 2019-07-16 02:25:56 · 281 阅读 · 0 评论 -
最长连续序列
题目给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-consecutive-sequence...原创 2019-07-19 02:19:56 · 214 阅读 · 0 评论 -
鸡蛋掉落
题目你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= ...原创 2019-06-14 02:25:57 · 1310 阅读 · 0 评论 -
Java源码解读(二)——String中的indexOf(String)
前天面试,面试官给了我一小时,让我写一个判断子串的函数,我虽然想到了KMP,但是不知其实现原理,就写了个暴力算法。今天看了一下Java源码中查找子串的函数,发现它们也是用的暴力(笑:先遍历父串,找到与子串第一个字符相同的字符的索引,再从该索引开始进行后面字符的比较,如果成功则返回该索引,否则从该索引后面继续寻找子串。indexOf(String)public int indexOf(Stri...原创 2019-06-06 17:54:26 · 2131 阅读 · 9 评论 -
无重复字符的最长子串
题目https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/解答暴力法穷举所有子串,子串起始位置为 i ( i >= 0 ),结尾位置为 j ( i <= j <= len ),判断它们有无重复字符,记录它们的长度,找出最长的。时间复杂度 O(n^3)。跳跃的滑动窗...原创 2019-06-05 22:53:46 · 111 阅读 · 0 评论 -
序列划分(正)
题目总工程师 题目描述 有M个软件工程师正在完成一个大型软件,需要开发若干个组件。 已知完成每个组件的开发时间保存在一个数组A里面,每个工程师只能独立完成连续的组件, 并且所有的工程师都是并行工作, 请输出完成这个软件需要的最少时间输入说明 程序从当前路径下的data.txt文件中读取测试数据。 第一行会有1个数值,表示M 第二行则是A数组,元素之间以空格隔开输出说明 向...原创 2018-09-12 19:06:19 · 789 阅读 · 0 评论 -
最大序列和
题目最大序列和 给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。对于S的所有非空连续子序列T,求和最大的子序列。以上说明中:N 为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。【输入说明】在程序当前路径下存在文件input.data,程序从input.data中读取输入数据。input.data为单行...原创 2018-09-12 16:11:10 · 261 阅读 · 0 评论 -
新汉诺塔
题目汉诺塔问题题目描述有三个柱子A,B,C上面随机套了N个大小不一盘子(N &lt;= 31),小号盘子依次罗在大号盘子上面, 现需要将所有的盘子都移到C柱上面,在移动的过程当中:每次只能将一个柱子最上面的盘子放到其它柱子的最上面且任何时刻不能将大号的盘子压在小号的盘子上面。输入说明以命令行参数的形式输入盘子的初始状态,以及移动步数S(S &lt;= 2^31 - 1)。在程序中可...原创 2018-09-18 18:55:04 · 732 阅读 · 0 评论 -
回文字符分割
题目最美字符串题目描述字符串有很多格式,我们定义最美字符串为:能够对称的比如“CBABC“, 因为字符串本身和它的反转字符串是相同的,也即字符串以中间字符为轴心呈对称展开。现在需要您帮忙提供方案能够将任一字符串经过最少切割次数使得每个子字串都是最美字符串。输入说明程序从当前路径下的data.txt文件中读取测试数据。文件内容只有一行待测字符串(只包含数字和字母,且区分大小写, 字符...原创 2018-09-18 19:44:05 · 213 阅读 · 0 评论 -
拆弹专家(密码BFS)
题目拆弹专家 题目描述 外星人在地球内核种植了一颗反物质炸弹,但是把一个带密码的遥控器遗留在了地球上。 人类密码学家很快破解了该密码,但是时间不多,需要最快的时间解除该密码并解除炸弹。 程序员又来拯救世界了! 该密码由4位1~9的数字组成。 每步你可以对任意一位数上拨或下拨。(9上拨变成1, 1上拨变成2,9下拨变成8); 把相邻的两个数字交换位置(注意,最左边的数字...原创 2018-09-13 16:55:01 · 1126 阅读 · 0 评论 -
最长无重复字符子串
题目有奖征名 题目描述 MTK 内部每款芯片都会有一个名字,比如 Oppo R15 中采用的 AI 芯片 HelioP60。现在公司即将量产一块芯片,为此在内部举办了征名比赛,命名的规则要求简洁,请你找出员工提交的命名中不包含重复字符的最长子串作为最后的候选结果,如果存在多个符合条件的子串,则输出第一个符合条件的子串。 例如输入一个字符串为:helioP60isisGood ,该字符串中满...原创 2018-09-13 18:07:30 · 157 阅读 · 0 评论 -
网格游戏
题目网格游戏题目描述有一个m*n的游戏地图,地图的起点在左上角(0,0),终点在右下角(m-1, n-1),每个坐标点上有不同数量的金币,游戏开始后每经过一个坐标点,就可以获得该坐标点上的金币,要求玩家从起点开始,只能向下或向右移动。请求出玩家最多能获得多少金币。输入说明程序从当前路径下的data.txt文件中读取测试数据。文件里面保存m(1-100)行 n(1-100)列的整数(0...原创 2018-09-19 17:58:30 · 1332 阅读 · 0 评论 -
二阶魔方旋转
题目转动魔方题目描述二阶魔方有6个不同颜色的面,分别是红(Red),橙(Orange),黄(Yellow),白(White),蓝(Blue)和绿色(Green),每个面都有 4个小正方块拼成初始状态:魔方已经还原,并且W色朝下,Y色向上,R色在前,O色在后,B色左边,G色右边。定义三种旋转操作:输入说明以命令行参数的形式,输入任意的旋转操作字符串序列, 如 XYZZXint...原创 2018-09-19 19:38:33 · 1010 阅读 · 0 评论 -
按奇偶校验排序数组
按奇偶校验排序数组给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。提示:1 <= A.length <= 50000 <= A[i] <...原创 2018-09-25 15:37:41 · 425 阅读 · 0 评论 -
子数组的最小值之和
子数组的最小值之和给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。由于答案可能很大,因此返回答案模 10^9 + 7。示例:输入:[3,1,2,4]输出:17解释:子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为 3,1,2,4,1,1,2,1,...原创 2018-09-27 14:45:59 · 1526 阅读 · 0 评论 -
水果成蓝
题目水果成篮在一排树中,第 i 棵树产生 tree[i] 型的水果。你可以从你选择的任何树开始,然后重复执行以下步骤:把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。移动到当前树右侧的下一棵树。如果右边没有树,就停下来。请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。你有两个篮子,每个篮子可...原创 2018-09-22 15:20:47 · 195 阅读 · 0 评论 -
从中序与后序遍历序列构造二叉树
题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7递归分治因为后序遍历的顺序是(左,右,根),最后一个节点总是根节点,而中...原创 2019-07-17 19:30:25 · 214 阅读 · 0 评论