![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java算法
Justdoforever
读书是为了更出色的人生!
展开
-
找到最大的矩阵面积 java
题目 找到最大的矩阵面积思路单调递增栈,正向遍历,找到右面第一个小于当前元素(cur)的元素的位置j;反向遍历,找到左边离我最近且小于我的元素的位置i,遍历所有元素:计算并找到cur*(i-j)的最大值,import java.util.Arrays;import java.util.Deque;import java.util.LinkedList;public class findMaxS { public static void main(String[] args) {原创 2021-05-11 22:37:20 · 249 阅读 · 0 评论 -
华为笔试21年4月10日
华为笔试21年4月10日1.反转括号里的字符串String str = “((jhkv)(love)i)”; // 变为ilovejhkvString str = “(u(s)(love)i)”; // 变为ilovesu从里面括号到外面括号依次反转,然后拼接思路用 递归定义:inverse(str,l,r) 反转str从l到r不包括括号的字符串若package com.company;public class fanzhuan { public static void main原创 2021-04-30 12:02:37 · 249 阅读 · 0 评论 -
冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序计数排序实现 Java
冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序计数排序实现import java.util.Arrays;public class maopao { public static void main(String[] args) { int[] a = {7, 8,9,6,3,5,6,7}; maopao maopao = new maopao();// maopao.sort(a);// maopao.insertS原创 2021-04-26 20:20:10 · 106 阅读 · 0 评论 -
Add One , dp
import java.util.Scanner;public class dp { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); int mod = 1000000007, max_m = 200005; int[] dp = new int[max_m]; f.原创 2021-04-19 16:38:24 · 165 阅读 · 0 评论 -
179. 最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”示例 3:输入:nums = [1]输出:“1”示例 4:输入:nums = [10]输出:“10”思路每个字符串排序,自定义比较器(str1 + str2).compareTo(str2 +原创 2021-04-12 18:55:54 · 113 阅读 · 0 评论 -
316. 去除重复字母
去除重复字母给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = “bcabc”输出:“abc”示例 2:输入:s = “cbacdcbc”输出:“acdb”提示:1 <= s.length .原创 2021-04-04 15:31:15 · 181 阅读 · 0 评论 -
76. 最小覆盖子串
最小覆盖子串给你一个字符串 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 由英文字母组成进阶:.原创 2021-03-28 19:53:35 · 108 阅读 · 0 评论 -
611. 有效三角形的个数 双指针
有效三角形的个数给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。题目大意给定一组数,求出所有可以构成三角形的解的个数。思路先排序,然后从高到低遍历:每次先固定一个最大边,然后一个左指针指向最小边,一个右指针指向固定边左边的一个边,当左指.原创 2021-03-28 15:58:49 · 151 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词 滑动窗口
找到字符串中所有字母异位词给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例 1:输入:s: “cbaebabacd” p: “abc”输出:[0, 6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。起始索引等于 6 的子串是 “bac.原创 2021-03-28 15:50:33 · 103 阅读 · 0 评论 -
567. 字符串的排列 滑动窗口
字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例 2:输入: s1= “ab” s2 = “eidboaoo”输出: False提示:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间class Solution .原创 2021-03-28 15:49:08 · 91 阅读 · 0 评论 -
平衡二叉树(AVL)平衡调整
文章目录一、AVL树简介二、AVL树相关概念三、调整第一类:LL,RR第二类,LR,RL一、AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。一棵原创 2021-03-28 15:43:07 · 2985 阅读 · 0 评论 -
放苹果
题目描述 放苹果把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。数据范围:0<=m<=10,1<=n<=10。本题含有多组样例输入。输入描述:输入两个int整数输出描述:输出结果,int型示例1输入复制7 3输出复制8题目描述m个苹果发到n个盘子上,盘子可以放苹果也可以不放苹果,组合问题。思路递归:定义函数:f(m, n)为m个苹果放到n个盘子上的分发数。分两种原创 2021-03-25 22:01:01 · 83 阅读 · 0 评论 -
84. 柱状图中最大的矩形
柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10题目大意给定一个柱状图,求该柱状图能够勾勒的最大矩形面积思路用一个单调自增栈才存数组索引,当当前元素大于栈顶元素时就出栈计算此.原创 2021-03-24 19:07:49 · 95 阅读 · 0 评论 -
42. 接雨水
接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n <= .原创 2021-03-24 18:24:52 · 79 阅读 · 0 评论 -
Java 异常处理
Java 异常处理捕获异常捕获异常使用try…catch语句,把可能发生异常的代码放到try {…}中,然后使用catch捕获对应的Exception及其子类:static byte[] toGBK(String s) { try { return s.getBytes("GBK"); } catch (UnsupportedEncodingException e) { // 先记下来再说: e.printStackTrace();原创 2021-03-17 16:58:18 · 137 阅读 · 0 评论 -
146. LRU 缓存机制
LRU 缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在.原创 2021-03-18 11:41:10 · 164 阅读 · 0 评论 -
990. 等式方程的可满足性
等式方程的可满足性给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。示例 1:输入:[“a==b”,“b!=a”]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满足第二个方程。.原创 2021-03-18 10:41:29 · 166 阅读 · 0 评论 -
扭蛋机
题目描述22娘和33娘接到了小电视君的扭蛋任务:一共有两台扭蛋机,编号分别为扭蛋机2号和扭蛋机3号,22娘使用扭蛋机2号,33娘使用扭蛋机3号。扭蛋机都不需要投币,但有一项特殊能力:扭蛋机2号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+1个扭蛋机3号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+2个22娘和33娘手中没有扭蛋,需要你帮她们设计一个方案,两人“轮流扭”(谁先开始不限,扭到的蛋可以交给对方使用),用“最少”的次数,使她们能够最后恰原创 2021-03-16 21:09:35 · 192 阅读 · 0 评论 -
113. 路径总和 II
路径总和 II给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]示例 2:输入:root = [1,2,3], targetSum = 5输出:[]示例 3:输入:root = [1,2].原创 2021-03-16 20:55:43 · 70 阅读 · 0 评论 -
206. 反转链表
反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() .原创 2021-03-16 20:55:09 · 64 阅读 · 0 评论 -
341. 扁平化嵌套列表迭代器 惰性加载
扁平化嵌套列表迭代器给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输入: [1,[4,[6]]]输出: [1,4,6]解释: 通过重复调用 ne.原创 2021-03-15 09:21:29 · 97 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5,1,6,.原创 2021-03-15 09:19:55 · 104 阅读 · 0 评论 -
222. 完全二叉树的节点个数
完全二叉树的节点个数给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例 1:输入:root = [1,2,3,4,5,6]输出:6示例 2:输入:root = []输出:0示例 3:输入:root = [1]输出:1提示:树中节点的数目范围是[0, 5 * 104.原创 2021-03-15 09:19:06 · 130 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取.原创 2021-03-14 09:40:14 · 74 阅读 · 0 评论 -
98. 验证二叉搜索树
验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。/** * Definition.原创 2021-03-14 09:36:19 · 80 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:示例 2:输入:root = [40,20,60,10,30.原创 2021-03-13 10:27:24 · 91 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
删除二叉搜索树中的节点给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。示例:root = [5,3,6,2,4,null,7]key = 35/ 3 6/ \ 2 4 7给定需要删除的节点值是 3,所以我们.原创 2021-03-13 10:26:12 · 85 阅读 · 0 评论 -
1539. 第 k 个缺失的正整数
第 k 个缺失的正整数给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。请你找到这个数组里第 k 个缺失的正整数。示例 1:输入:arr = [2,3,4,7,11], k = 5输出:9解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,…] 。第 5 个缺失的正整数为 9 。示例 2:输入:arr = [1,2,3,4], k = 2输出:6解释:缺失的正整数包括 [5,6,7,…] 。第 2 个缺失的正整数为 6 。提示:1 <= arr.l.原创 2021-03-12 09:33:42 · 83 阅读 · 0 评论 -
92. 反转链表 II
反转链表 II反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNod.原创 2021-03-12 09:32:50 · 60 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。// /**// * Definition for a binary tr.原创 2021-03-12 09:31:31 · 87 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo.原创 2021-03-08 10:45:26 · 67 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ 9 20/ 15 7/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeN.原创 2021-03-08 10:44:24 · 94 阅读 · 0 评论 -
226. 翻转二叉树
翻转二叉树翻转一棵二叉树。示例:输入: 4/ 2 7/ \ / 1 3 6 9输出: 4/ 7 2/ \ / 9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。/** * Definition for a binary tree node. * public c.原创 2021-03-06 10:47:25 · 105 阅读 · 0 评论 -
114. 二叉树展开为链表
二叉树展开为链表给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例 1:输入:root = [1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,4,null,5,null,6]示例 2:输入:root = []输出:[]示例 3:输入:root = [0]输出:[0.原创 2021-03-06 10:25:55 · 91 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中原创 2021-03-05 12:01:46 · 86 阅读 · 0 评论 -
5. 最长回文子串
最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成思路判断回文串左右指针两边向中间收缩,得到最长回文串从中间向两边伸展。代码.原创 2021-03-05 10:24:06 · 102 阅读 · 2 评论 -
25. K 个一组翻转链表
K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4,5], k = 3输出:[.原创 2021-03-05 10:12:16 · 113 阅读 · 1 评论 -
92. 反转链表 II
反转链表 II反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNod.原创 2021-03-05 10:11:19 · 91 阅读 · 1 评论 -
234. 回文链表
回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} .原创 2021-03-05 09:48:15 · 79 阅读 · 1 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为原创 2021-03-01 15:25:04 · 68 阅读 · 0 评论