![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java【-】
算法题目
浆果吖
程序员
展开
-
【Java - L - 0102】- m - 二叉树的层序遍历
lc-102. 二叉树的层序遍历【Java - J - 32】原创 2023-09-21 23:09:56 · 138 阅读 · 0 评论 -
【Java - J - 68-Ⅰ 】二叉搜索树的最近公共祖先
题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]lc实现方法二:一次遍历思路与算法:–我们从根节点开始遍历;–如果当前节点的值大于 pp 和 qq 的值,说明 pp 和 qq 应该原创 2021-05-02 15:32:25 · 256 阅读 · 1 评论 -
【Java - L - 0226】e - 翻转二叉树
题目描述翻转一棵二叉树。lc实现J - 27】二叉树的镜像原创 2021-05-01 16:12:38 · 237 阅读 · 0 评论 -
【Java - L - 0009】e - 回文数
题目描述给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:truelc练习实现-m public boolean isPalindrome(int x) { if (x < 0) return false; if (x >= 0 && x <=原创 2021-04-23 16:53:08 · 247 阅读 · 0 评论 -
【Java - L - 0074】m - 搜索二维矩阵
题目描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。lc练习实现J - 04】二维数组中的查找...原创 2021-04-23 16:04:27 · 148 阅读 · 0 评论 -
【Java - L - 0082】- m - 删除排序链表中的重复元素 II
题目描述https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/J - 18-2】删除链表的节点-删除链表中重复的节点实现原创 2021-04-22 18:39:26 · 91 阅读 · 0 评论 -
【Java - L - 0083】- e - 删除排序链表中的重复元素(不含包)
问题描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。删除-不包含本节点J - 18】删除链表的节点-删除链表中重复的节点-删除本节点实现 public ListNode deleteDuplicates(ListNode head) { ListNode node = head; while (node != null && node.next !原创 2021-04-22 18:01:08 · 85 阅读 · 0 评论 -
【Java - J - --】交替打印字母数字
实现-condition static boolean flag = true; public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition letter = lock.newCondition(); Condition num = lock.newCondition(); new Thread(new Runnabl原创 2021-04-20 11:37:26 · 168 阅读 · 0 评论 -
【Java - J - 36】二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。lc练习实现原创 2021-04-19 02:36:39 · 101 阅读 · 0 评论 -
【Java - L - 0155】- e - 最小栈
题目描述设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。lc练习J - 30】包含min函数的栈实现辅助栈class MinStack { /** initialize your data structure here. */ Stack<Integer> A, B;原创 2021-04-18 18:36:56 · 88 阅读 · 0 评论 -
【Java - L - 0234】- e - 回文链表
题目描述请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: truelc练习实现1-数组+指针方法一:将值复制到数组中后用双指针法一共为两个步骤:复制链表值到数组列表中。使用双指针法判断是否为回文。复杂度分析时间复杂度:O(n),其中 n 指的是链表的元素个数。空间复杂度:O(n),其中 n 指的是链表的元素个数,我们使用了一个数组列表存放链表的元素值。 public bo原创 2021-04-18 18:05:59 · 136 阅读 · 0 评论 -
【Java - L - 0113】- m - 路径总和 II
题目描述给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]lc练习实现参考:lc复杂度分析时间复杂度:O(N^2) n的平方空间复杂度:O(N) List<List<Integ原创 2021-04-18 17:21:41 · 114 阅读 · 0 评论 -
【Java - L - 0169】- e - 多数元素
题目描述给你二叉树的根节点 root ,返回它节点值的 前序 遍历。lc实现-递归执行结果:执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:36.4 MB, 在所有 Java 提交中击败了97.57%的用户 List<Integer> res = new ArrayList<>(); public List<Integer> preorderTraversal(TreeNode root) {原创 2021-04-18 16:06:02 · 93 阅读 · 0 评论 -
【Java - L - 0718】- m - 最长重复子数组
题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。lc实现1-动态规划参考:1|2思路:–A 、B数组各抽出一个子数组,单看它们的末尾项,如果它们俩不一样,则公共子数组肯定不包括它们俩——以它们俩为末尾项形成的公共子数组的长度为0:dp[i][j] = 0–如果它们俩一样,以它们俩为末尾项的公共子数组,长度保底为1——dp[i原创 2021-04-18 15:56:47 · 122 阅读 · 0 评论 -
【Java - L - 0144】- m - 二叉树的前序遍历
题目描述给你二叉树的根节点 root ,返回它节点值的 前序 遍历。lc实现-递归 List<Integer> res = new ArrayList<>(); public List<Integer> preorderTraversal(TreeNode root) { traversal(root); return res; } public void traversal(TreeNode ro原创 2021-04-10 20:03:38 · 97 阅读 · 0 评论 -
【Java - L - 0110】- e - 平衡二叉树
题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。lcJ - 55】二叉树的深度_平衡二叉树实现 public boolean isBalanced(TreeNode root) { return getDepth(root) != -1; } public int getDepth(TreeNode root) { if (root =原创 2021-04-10 19:27:45 · 82 阅读 · 0 评论 -
【Java - L - 0704】- e - 二分查找
题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4lc实现 //时间复杂度:O(logN)。空间复杂度:O(1)。 public int search(int[] nums, int target) {原创 2021-04-10 18:11:12 · 119 阅读 · 0 评论 -
【Java - L - 0300】m - x - 最长递增子序列
题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。lc实现-dp public int lengthOfLIS(int[] nums) { if (nums == null || nums.length == 0) { return 0; } i原创 2021-04-09 11:34:25 · 111 阅读 · 0 评论 -
【Java - L - 0070】- e - 爬楼梯
题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶lcJ - 10】斐波那列数列J 10- II. 青蛙跳台阶问题实现3-dp变量 public int climbStairs(int n) { if (n <= 0) return 0; if原创 2021-04-07 22:56:58 · 61 阅读 · 0 评论 -
【Java - L - 0260】m - 只出现一次的数字 III
题目描述给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。lc实现异或J - 56】数组中数字出现的次数_数组中只出现一次的两个数字...原创 2021-04-07 18:03:21 · 64 阅读 · 0 评论 -
【Java - L - 0137】m - 只出现一次的数字 II (其他三次)
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3lc实现J - 56】数组中数字出现的次数_数组中唯一出现一次的数字...原创 2021-04-07 17:16:20 · 96 阅读 · 0 评论 -
【Java - L - 0136】e - 只出现一次的数字(其他两次)
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1lc实现异或 class Solution { public int singleNumber(int[] nums) { if (nums == null || nums.length == 0) {原创 2021-04-07 16:41:49 · 67 阅读 · 0 评论 -
【Java - L - 0033】- m - 搜索旋转排序数组
题目描述整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个原创 2021-03-30 20:19:09 · 68 阅读 · 0 评论 -
【Java - L - 0042】- h - 接雨水
ThreadLocal原创 2021-03-30 18:43:45 · 63 阅读 · 0 评论 -
【Java - L - 0200】m - x - 岛屿数量
题目描述给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1lc实现** 深度优先遍历dfs:**时间复杂度:原创 2021-03-23 16:30:51 · 88 阅读 · 0 评论 -
【Java - L - 0054】m - x - 螺旋矩阵
题目描述lc29】顺时针打印矩阵实现 public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<>(); if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return res; int l原创 2021-03-23 15:55:48 · 70 阅读 · 0 评论 -
【Java - L - 0199】m - x - 二叉树的右视图
题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释:1 <—/ 2 3 <—\ 5 4 <—lc实现1BFS --层次遍历利用广度优先搜索进行层次遍历,记录下每层的最后一个元素。 public List<Integer> righ原创 2021-03-23 15:26:42 · 79 阅读 · 0 评论 -
【Java - D】重写TreeMap和sort
题目描述统计频率,并按序输出实现public class Solution { public static void sortValue(int[] nums) { TreeMap<Integer, Integer> map = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, I原创 2021-03-22 14:52:43 · 267 阅读 · 0 评论 -
【Java - L - 0088】- e - 合并两个有序数组
题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]lcJ - 25】合并两个排序的链表实原创 2021-03-21 17:46:02 · 61 阅读 · 0 评论 -
【Java - L - 0094】- m - 二叉树的中序遍历
题目描述给定一个二叉树的根节点 root ,返回它的 中序 遍历。lc实现递归时间复杂度:O(n),其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。空间复杂度:O(n)。空间复杂度取决于递归的栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别。class Solution { List<Integer> res = new ArrayList<>(); public List<Integer>原创 2021-03-21 16:58:57 · 87 阅读 · 0 评论 -
【Java - L - 0141】- e - 环形链表
题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。lcJ - 23】链表中环的入口节点实现O(N)O(N) public boolean h原创 2021-03-21 16:34:49 · 77 阅读 · 0 评论 -
【Java - L - 0236】m - x - 二叉树的最近公共祖先
题目描述lcJ - 68-Ⅱ】树中两个节点的最低公共祖先实现同68.2原创 2021-03-21 13:26:18 · 71 阅读 · 0 评论 -
【Java - L - 0138】- m - 复制带随机指针的链表
问题描述lcJ - 35】复杂链表的复制–注意最后一段不一样实现思路可看:jz35时间复杂度:O(N)。空间复杂度:O(1)。 class Solution { public Node copyRandomList(Node head) { if (head == null) { return null; } Node node = head;原创 2021-03-21 02:54:38 · 144 阅读 · 0 评论 -
【Java - L - 0415】e - 字符串相加
题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。输入“243”“34”输出"277"lc58】翻转字符串_翻转单词顺序58】翻转字符串_左旋转字符串实现 public String addStrings(String num1, String num2) { StringBuilder sb = new StringBuilder(); int carry = 0; int i = num1.length(原创 2021-03-15 16:23:04 · 112 阅读 · 0 评论 -
【Java - L - 0142】m -环形链表 II
题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?lc实现J - 23】链表中环的入口节点...原创 2021-03-12 18:52:36 · 71 阅读 · 0 评论 -
【Java - L - 0160】e - 相交链表
题目描述输入: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 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。原创 2021-03-12 11:16:28 · 80 阅读 · 0 评论 -
【Java - L - 0053】e - 最大子序和
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。lcJ - 42】连续子数组的最大和实现同42...原创 2021-03-12 02:03:48 · 109 阅读 · 0 评论 -
【Java - L - 0015】m - 三数之和
题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]lc关联TwoSum:J - 57】和为s的数字_和为s的两个数字J - 57】和为s的数字_和为s的连续正整数序列L - 0001】e - 两数之和实现排序+T原创 2021-03-12 01:47:26 · 119 阅读 · 0 评论 -
【Java - L - 0121】e - √ - 买卖股票的最佳时机
全局锁和表锁《Mysql45-06》按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。MyISAM和InnoDB存储引擎使用的锁:◆ MyISAM采用表级锁(table-level locking)。◆ InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁行级锁,表级锁和页级锁对比1)行级锁◆ 行级锁是Mysql中锁定原创 2021-03-10 11:49:14 · 342 阅读 · 1 评论 -
【Java - L - 0003】m - 无重复字符的最长子串
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。lc关联48】最长不含重复字符的子字符串实现动态规划 public int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) return 0; //初始化 标记是否被访问原创 2021-03-05 11:42:18 · 82 阅读 · 0 评论