随笔分类 - 算法
摘要:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 leetcode 解题思路:动态规划。 首先建立状态表示数组,通过一个二维数组,表示两个字符串,在各自不同的长
阅读全文
摘要:有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。 leetcode 纯DP方法 解题思路:首先根据身高将数组顺序排列,然后将身高相同的根据体重顺序排列。这样就
阅读全文
摘要:每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量。有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来。给定两个列表,一个是名字及对应的频率,另一个是本质相同的名字对。设计一个算法打印出每个真实名字的实际频率。注意,如果 Joh
阅读全文
摘要:求最长合法括号序列问题 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 leetcode 解题思路: 利用一个前缀和的思想,顺序遍历,遇到左括号和加一;遇到右括号,和减一。当和为0的时候,就是一个合法序列。如果和为负数,那么以当前起点产生的序列不再可能产生合法的序
阅读全文
摘要:给你一个链表数组,每个链表都已经按升序排列。 你将所有链表合并到一个升序链表中,返回合并后的链表。 leetcode 解题思路:利用一个优先队列,对有序链表的头节点进行维护,每次取出一个队列头,就能取到节点中的最小值,然后添加到新建的链表尾部,然后如果这个节点有next,就把他的next再放进优先队
阅读全文
摘要:给定一个包含正整数、加(+)、减(-)、乘( * )、除(/)的算数表达式(括号除外),计算其结果。 表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。 leetcode 解题思路:模拟CPU进行运算的方式,利用栈的思想。遍历字符串,如果遇到符号,则读取下一个数
阅读全文
摘要:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,
阅读全文
摘要:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 l
阅读全文
摘要:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是
阅读全文
摘要:给定一个带权有向图,计算任意两结点间的最短路径。 算法思想:遍历每个点到另外点的距离。三层循环,第一层枚举中间点,第二层和第三层枚举起点和终点。 public static void main() { int N = 1010, M = 2000010, INF = 1000000000; int[
阅读全文
摘要:题目 n个村庄间架设通信线路,每个村庄间的距离不同,如何架设最节省开销? Kruskal算法 特点 适用于稀疏图,时间复杂度 是nlogn的。 核心思想 从小到大选取不会产生环的边。 代码实现 代码中需要采用并查集的方法检测是否有环。 static class Edge { int a, b, va
阅读全文
摘要:什么是霍夫曼树 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化。 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为霍夫曼树(Huffman Tree)。 霍夫曼树的构造思路 若要使得带权外路径长度最小,
阅读全文
摘要:你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b
阅读全文
摘要:给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。 设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回[S[0],S[1]]作为答案,若有多条直线穿过了相同数量的点,则选择S[0]值
阅读全文
摘要:给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 leetcode 解题思路:如果这个数的各个位是递增的,那么直接从最后面开始移除一定就是最最小的;如果这个数的位值不是底层的,那么,尽量移除高位的逆序数字。如果最后变成递增了之后,k还有的剩,就再从后面移除大的
阅读全文
摘要:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 leetcode 解题思路:迭代模拟每个情况下,概率的累加值。 分成三重循环: 第一层循环
阅读全文
摘要:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 解题思路:利用与或符号,模拟位的加法与进位。 位的异或就是当前位的加法,但是没有办法算进位,所以,需要通过位与和左移来算进位,如果两个都是1,那么进位才是1。 为什么负数也能适用呢? 以 9 + (-
阅读全文
摘要:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 leetcode 解题思路:约瑟夫
阅读全文
摘要:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 leetcode 解题思路:采用单调队列的思想,队列中应该是单调递减的,大的值先出队列,这样,每次在取滑动窗口的最大值的时候,就取队首元素即可。 单调队列入队操作 这个和单调栈差不多,当前元素和队尾元素进行比较,如果队尾元
阅读全文
摘要:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 解题思路: 首先通过一次遍历,获取所有元素的异或值;计算异或值中的一个值是1的位,这个位就是答案中两个数字的不同之处;利用这个位,在于求部分
阅读全文

浙公网安备 33010602011771号