![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
会说话的汤姆
这个作者很懒,什么都没留下…
展开
-
leetcode汇总区间
汇总区间给定一个无重复元素的有序整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:“a->b” ,如果 a != b“a” ,如果 a == b示例 1:输入:nums = [0,1,2,4,5,7]输出:[“0->2”,“4->5”,“7”]解释:区间范围是:[0,2].原创 2021-01-10 09:46:51 · 137 阅读 · 0 评论 -
最小覆盖子串(hard级别)
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例 2:输入:s = “a”, t = “a”输出:“a”提示:1 <= s.length, t.length <= 105s 和 t 由英文字母组成来源:力扣(LeetCo原创 2021-01-05 11:46:23 · 181 阅读 · 0 评论 -
java如何构建一颗二叉排序树
第一个版本: (非递归方法)https://blog.csdn.net/zhenzuo_x/article/details/87968492第二个版本: (递归方法)class BinaryTree { private Node root; // 添加节点的方法 public void add(Node node) { if(root == null){ root = node; // 如果root为空则直接让root指向node } e.原创 2021-01-05 10:45:29 · 286 阅读 · 0 评论 -
合并K个排序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode原创 2021-01-05 09:03:13 · 60 阅读 · 0 评论 -
一个算法问题尚未解决(Leetcode 5643)
我们称一个分割整数数组的方案是 好的 ,当它满足:数组被分成三个 非空 连续子数组,从左至右分别命名为 left , mid , right 。left 中元素和小于等于 mid 中元素和,mid 中元素和小于等于 right 中元素和。给你一个 非负 整数数组 nums ,请你返回 好的 分割 nums 方案数目。由于答案原创 2021-01-03 16:44:08 · 148 阅读 · 0 评论 -
Leetcode算法周赛-双指针,三指针操作
将数组分成三个子数组的方案数我们称一个分割整数数组的方案是 好的 ,当它满足:数组被分成三个 非空 连续子数组,从左至右分别命名为 left , mid , right 。left 中元素和小于等于 mid 中元素和,mid 中元素和小于等于 right 中元素和。给你一个 非负 整数数组 nums ,请你返回 好的 分割 nums 方案数目。由于答案可能会很大,请你将结果对 109 + 7 取余后返回。示例 1:输入:nums = [1,1,1]输出:1解释:唯一一种好的分割方案是将 .原创 2021-01-03 16:34:20 · 208 阅读 · 0 评论 -
Leetcode算法周赛之两数之和进阶版(加油加油啦,欢迎大家关注我的微信公众号: 大明前端)
大餐计数大餐 是指 恰好包含两道不同餐品 的一餐,其美味程度之和等于 2 的幂。你可以搭配 任意 两道餐品做一顿大餐。给你一个整数数组 deliciousness ,其中 deliciousness[i] 是第 i 道餐品的美味程度,返回你可以用数组中的餐品做出的不同 大餐 的数量。结果需要对 109 + 7 取余。注意,只要餐品下标不同,就可以认为是不同的餐品,即便它们的美味程度相同。示例 1:输入:deliciousness = [1,3,5,7,9]输出:.原创 2021-01-03 15:35:38 · 200 阅读 · 0 评论 -
区间调度问题(贪心算法)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/non-overlapping-intervals著作权归领扣网络所有。商原创 2020-12-31 08:37:11 · 626 阅读 · 0 评论 -
大数相乘解决方案(面试常考!!!一定要掌握)
// 模拟竖式乘法 public String multiply(String num1, String num2) { if(num1.equals("0") || num2.equals("0")){ return "0"; } int len1 = num1.length(); int len2 = num2.length(); int[] ansArr = new int[len1 + len原创 2020-12-30 16:45:22 · 107 阅读 · 1 评论 -
最长公共子序列(动态规划)
public static int getLCS(String s1, String s2) { char[] ch1 = s1.toCharArray(); char[] ch2 = s2.toCharArray(); int[][] dp = new int[ch1.length+1][ch2.length+1]; //int max = 0; //int right = 0; for(int i = 1;原创 2020-12-30 16:18:09 · 48 阅读 · 0 评论 -
最长公共子串(动态规划)
public static String getLCS(String s1, String s2) { char[] ch1 = s1.toCharArray(); char[] ch2 = s2.toCharArray(); int[][] dp = new int[ch1.length+1][ch2.length+1]; int max = 0; int right = 0; for(int i = 1;原创 2020-12-30 16:10:39 · 153 阅读 · 0 评论 -
牛客算法之拿面包
链接:https://ac.nowcoder.com/acm/contest/10323/B来源:牛客网自助餐厅里有5个盘子,里面装的都是面包。第1个盘子里有无限个面包;第2个盘子里只有1个面包;第3个盘子里只有4个面包;第4个盘子里也有无限个面包,但必须两个两个地拿;第5个盘子里也有无限个面包,但必须5个5个地拿;给定正整数n,求有多少种正好拿出n个面包的方案。方案a和方案b不同,当且仅当方案a存在从某个盘子里拿出面包的数量与方案b中对应盘子拿出的数量不同。示例1输入复制1返回原创 2020-12-23 08:15:23 · 141 阅读 · 0 评论 -
差分法(面试重要!important)
链接:https://ac.nowcoder.com/acm/contest/10323/A来源:牛客网牛牛现在在花园养了n棵树,按顺序从第1棵到第n棵排列着。牛牛每天会按照心情给其中某一个区间的树浇水。例如如果某一天浇水的区间为[2,4],就是牛牛在这一天会给第2棵,第3棵和第4棵树浇水。树被浇水后就会成长,为了简化问题,我们假设在初始时所有树的高度为0cm。每过去一天树会自然成长1cm,每次树被浇水后当天会额外成长1cm。m天中牛牛每天都都会选一个区间[l,r]对这个区间内的树进行浇水,牛牛想知道m原创 2020-12-23 08:08:12 · 136 阅读 · 2 评论 -
leetcode不同的二叉搜索树
标签:动态规划假设 n 个节点存在二叉排序树的个数是 G (n),令 f(i) 为以 i 为根的二叉搜索树的个数,则G(n) = f(1) + f(2) + f(3) + f(4) + … + f(n)G(n)=f(1)+f(2)+f(3)+f(4)+…+f(n)当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i,则f(i) = G(i-1)*G(n-i)f(i)=G(i−1)∗G(n−i)综合两个公式可以得到 卡特兰数 公式G(n) = G(0)G(n-1)+G(1)(n原创 2020-12-22 17:15:21 · 68 阅读 · 0 评论 -
牛客巅峰赛S2赛季第六场
在这里插入图片描述暴力:链接:https://ac.nowcoder.com/acm/contest/9715/B来源:牛客网给出一个仅包含小写字母的字符串s,你最多可以操作k次,使得任意一个小写字母变为与其相邻的小写字母(ASCII码差值的绝对值为1),请你求出可能的最长相等子序列(即求这个字符串修改至多k次后的的一个最长子序列,且需要保证这个子序列中每个字母相等)。子序列:从原字符串中取任意多个字母按照先后顺序构成的新的字符串。桶排序???动态规划:动态规划:方案数,可行性和最值原创 2020-12-04 21:42:45 · 69 阅读 · 0 评论 -
后缀表达式
链接:https://ac.nowcoder.com/acm/contest/9556/C来源:牛客网给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过10^{18}1018/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 给定一个后缀表达式,返回它的结果 * @p原创 2020-12-02 08:56:49 · 111 阅读 · 0 评论 -
牛客巅峰赛滑动窗口
牛牛非常怕他的女朋友,怕到了走火入魔的程度,以至于每当他看到一个字符串同时含有n,p,y三个字母他都害怕的不行。现在有一个长度为m的只包含小写字母‘a’-‘z’的字符串x,牛牛想知道能令他不害怕的最长子串的长度是多少。(对于字符串”abc”来说,”c”,”ab”都是原串的子串,但”ac”不是原串子串)function Maximumlength( x ) { // write code here let window = new Map(); let left = 0; l原创 2020-12-01 21:04:19 · 72 阅读 · 0 评论 -
算法练习
牛牛有n个玩偶,牛牛打算把这n个玩偶摆在桌子上,桌子的形状的长条行的,可以看成一维数轴。桌子上有M个互不相交的区间,这些区间上面可以放置玩偶,一个位置只能放置一个玩偶,玩偶之间的距离越大,越美观,牛牛想最大化D的值,其中D为最近两个玩偶之间的距离。请帮牛牛求出D的最大可能的值。二分法: { public int doll(int n, int m, Interval[] intervals) { Arrays.sort(intervals, (a, b)-> (a.star原创 2020-12-01 07:35:13 · 167 阅读 · 0 评论 -
交叉乘算法
先给出一个整数数组,a1,a2,a3,…,an,然后给你一对整数l,r, (l <= r),计算i:l->r j: i + 1-> r ai*aj 的值import java.util.*// a: int整型一维数组,a1,a2,a3,...,an// query int整型:一维数组 l1, r1, l2, r2,...lq,rq// int 整型,一维数组public class Solution { private int mod = 1000000007;原创 2020-11-30 19:39:46 · 283 阅读 · 0 评论 -
js数组和树的相互转化
var list = [ {id: 0, pid: "", name: "北京"}, {id: 1, pid: 0, name: "昌平"}, {id: 2, pid: 1, name: "顺安"}, {id: 3, pid: 1, name: "哈哈"},]console.log(toTree(list));function ToTree(arr){ return dfs(arr, "");} function dfs(arr, local_id){原创 2020-11-05 10:20:26 · 375 阅读 · 0 评论 -
大数相乘解决方案
public class Solution { if(num1.equals("0") || num2.equals("0")) { return "0"; } int len1 = num1.length(); int len2 = num2.length(); int[] ansArr = new int[len1 + len2]; for(int i = len1 - 1; i >= 0; i--){ int x = n原创 2020-11-05 07:20:11 · 173 阅读 · 0 评论 -
二分查找
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-a-2d-matrix著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public boolean searchMatrix(int[][] matrix, in原创 2020-11-04 11:38:06 · 182 阅读 · 0 评论 -
机器人的运动范围
这里写自定义目录标题导入地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2原创 2020-11-02 10:41:06 · 57 阅读 · 0 评论 -
单词搜索--经典的回溯问题
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/word-search著作权归领扣网络所有。商业转载请联系官原创 2020-11-01 16:06:45 · 154 阅读 · 0 评论 -
前序中序遍历构建二叉树
思路:递归,如图:class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { int preLen = preorder.length; int inLen = inorder.length; Map<Integer, Integer> inMap = new HashMap<>(); for(int i = 0; i <原创 2020-11-01 14:29:55 · 67 阅读 · 0 评论 -
荷兰国旗问题
荷兰国旗问题,运用了三路快速排序的思想。题目描述:给定一个数组,只有0,1,2三个数[0,1,0,1,2,2,1,2,0];利用三指针,[0,i] <val [i+1, j] =val; [k, high-1] >val;具体思路如上图所示:代码:public class Solution { public void quickSort(int[] arr) { int i = -1; int k = arr.length; for(int原创 2020-11-01 12:25:23 · 148 阅读 · 2 评论 -
2020-10-28
一道链表题目总结:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https:原创 2020-10-28 23:30:17 · 78 阅读 · 0 评论 -
滑动窗口
困扰大家的,不是算法的思路,而是各种细节问题,比如说如何向窗口中添加新元素,如何缩小窗口,在滑动窗口的各个阶段进行更新窗口。滑动窗口框架:/*滑动窗口算法的框架*/function slidingWindow(s,t){ let window = new Map(); let left = 0, right = 0; let valid = 0; while(right < s.size()) { // c是要移入窗口的字符 char c = .原创 2020-10-28 23:04:01 · 85 阅读 · 0 评论 -
环形链表
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle-ii思路:首先肯定是必须判断链表是否有环,如何判断呢?联想到快慢指针,如果链表原创 2020-10-22 08:38:59 · 95 阅读 · 0 评论