随笔分类 - 算法
摘要:镜像二叉树,也称为对称二叉树,是指一棵二叉树,它的左子树是右子树的镜像(或反过来,右子树是左子树的镜像)。判断一个二叉树是否是对称的,可以通过递归的方式进行。以下是一个简单的Java算法实现: 首先,定义二叉树的节点类: class TreeNode { int val; TreeNode left
阅读全文
摘要:在Java中删除二叉搜索树(Binary Search Tree, BST)中的某个节点,需要考虑几种情况,因为节点可能有0个、1个或2个子节点。以下是一个简单的示例实现,假设我们有一个Node类定义了二叉树节点: class Node { int val; Node left; Node righ
阅读全文
摘要:一、不同算法策略特点小结 1、贪心策略 贪心策略一方面是求解过程比较简单的算法,另一方面它又是对能适用问题的条件要求最严格(即适用范围很小)的算法。 贪心策略解决问题是按一定顺序,在只考虑当前局部信息的情况下,就做出一定的决策,最终得出问题的解。 即:通过局部最优决策能得到全局最优决策 2、递推策略
阅读全文
摘要:import java.util.concurrent.locks.ReentrantLock; public class AsynObject { private volatile int count; private ReentrantLock lock = new ReentrantLock(
阅读全文
摘要:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接:https://leetcode
阅读全文
摘要:total合计小于0,必然不能循环 当某个节点的sum小于0时,说明以m开始循环会出现油不够的情况,则进行下一次循环。 public static void main(String[] args) { int[] gas = {2, 3, 1}; int[] cost = {3, 1, 2}; Sy
阅读全文
摘要:在一个环上有n个加油站,已知第i个加油站可以提供ai的油量,从第i个加油站到第i+1个加油站需要消耗bi的油量。(当i为n时,则表示n到1的油量) 问:是否能从某个加油站出发,绕环一圈回到这个加油站?(当途中到达某个加油站时的油量小于0则不可)。 public static void main(St
阅读全文
摘要:{[1 ,8][6 ,4][6 ,7][5 ,2][6 ,5][5 ,4][2 ,3][1 ,8]} 上面数组为多个信封宽和高,求最多了嵌套多少个信封(两个信封的高或者宽相同时不能嵌套)? 正确答案为:[2 ,3][5 ,4][6 ,7] 解法:根据宽度进行生序排列,如果宽度相同,则按照高度降序排列
阅读全文
摘要:intvs=[[1,3],[2,4],[3,6]],这些区间最多有两个区间互不相交,即[[1,3],[3,6]],你的算法应该返回 2。注意边界相同并不算相交。 正确的思路其实很简单,可以分为以下三步: 从区间集合 intvs 中选择一个区间 x,这个 x 是在当前所有区间中结束最早的(end 最小
阅读全文
摘要:你和你的朋友面前有一排石头堆,用一个数组 piles 表示,piles[i] 表示第 i 堆石子有多少个。你们轮流拿石头,一次拿一堆,但是只能拿走最左边或者最右边的石头堆。所有石头被拿完后,谁拥有的石头多,谁获胜。 石头的堆数可以是任意正整数,石头的总数也可以是任意正整数,这样就能打破先手必胜的局面
阅读全文
摘要:public static void main(String[] args) { try { LRUStruct lruStruct = new LRUStruct(4); lruStruct.put("1", 1); lruStruct.put("2", 2); lruStruct.put("3"
阅读全文
摘要:算法参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484482&idx=1&sn=9503dae2ec50bc8aa2ba96af11ea3311&source=41#wechat_redirect 备忘录算
阅读全文
摘要:算法参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484482&idx=1&sn=9503dae2ec50bc8aa2ba96af11ea3311&source=41#wechat_redirect publ
阅读全文
摘要:static class Node { private Node next; private int val; public Node(Node next, int val) { this.next = next; this.val = val; } } public static void mai
阅读全文
摘要:public static int a() { int target = 6; int[] a = {3, 3, 1, 3, 3, 7, -1}; int[] dp = new int[a.length + 1]; //初始化 dp[0] = 0; for (int i = 1; i < dp.le
阅读全文
摘要:public static void main(String[] args) { int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int startI = 0; int endI = a.length - 1; while (startI <= endI) {
阅读全文
摘要:public static void main(String[] args) { int target = 10; int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int startI = 0; int endI = a.length - 1; while (s
阅读全文
摘要:static class Node { private Node next; private int val; public Node(Node next, int val) { this.next = next; this.val = val; } public Node getNext() {
阅读全文
摘要:判断单链表是否有环,如果有环的话,具体再有环的节点是哪个? static class Node { private Node next; private int val; public Node(Node next, int val) { this.next = next; this.val = v
阅读全文
摘要:通过快慢指针方式对数组进行去重 public static void main(String[] args) { int[] a = {1, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 9, 10, 11}; int startI = 0; int
阅读全文