
leetcode
oj...
执子手 吹散苍茫茫烟波
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode43. 字符串相乘
1、竖式运算思路,StringBuilder保存每一轮的计算(根据规律需要补0操作),最后利用leetcode415字符串相加 完成和的计算。给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。输入: num1 = “123”, num2 = “456”num1 和 num2 都不包含任何前导零,除了数字0本身。输入: num1 = “2”, num2 = “3”num1 和 num2 只能由数字组成。输出: “56088”原创 2025-08-18 21:02:37 · 76 阅读 · 0 评论 -
leetcode415. 字符串相加
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。输入:num1 = “11”, num2 = “123”输入:num1 = “456”, num2 = “77”输入:num1 = “0”, num2 = “0”num1 和num2 都只包含数字 0-9。num1 和num2 都不包含任何前导零。原创 2025-08-18 20:28:17 · 191 阅读 · 0 评论 -
88. 合并两个有序数组
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。输入:nums1 = [0], m = 0, nums2 = [1], n = 1。输入:nums1 = [1], m = 1, nums2 = [], n = 0。解释:需要合并 [1,2,3] 和 [2,5,6]。解释:需要合并的数组是 [] 和 [1]。输出:[1,2,2,3,5,6]原创 2025-08-18 17:59:50 · 205 阅读 · 0 评论 -
LCR 076. 数组中的第 K 个最大元素
在此过程中,i走过的区域都是大于等于待排元素的,j走过的区域都是小于待排元素的,最后i和j相遇且指向的都是废弃元素。从i位置往后遍历,找到小于待排元素,把该元素换到右指针指向位置(上轮的废弃位置;从j位置往前遍历,找到大于待排元素,把该元素换到左指针指向位置(此时右指针位置废弃);请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入:nums = [3,2,3,1,2,4,5,5,6], k = 4。输入:nums = [3,2,1,5,6,4], k = 2。原创 2025-08-15 21:15:19 · 344 阅读 · 0 评论 -
leetcode387. 字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。2、使用哈希表,key为字符,value为是否出现重复字符。1、使用哈希表,key为字符,value为频次。输入: s = “loveleetcode”输入: s = “leetcode”输入: s = “aabb”原创 2025-08-15 16:53:24 · 165 阅读 · 0 评论 -
LCR 176. 判断是否为平衡二叉树
对二叉树做后序遍历,自底至顶返回左右子树深度,左右子树深度差都满足平衡树,则返回当前中间节点深度max(左子树深度,右子树深度)+1;从顶到底判断深度,引入一个获取当前子树深度的函数,比较左右子树深度差,若满足平衡,则依次比较左子树和右子树是否为平衡。先获取左右子树高度,再得出中间节点为根节点的树是否平衡,本质上是一种先序遍历。输入:root = [1,2,2,3,3,null,null,4,4]输入:root = [3,9,20,null,null,15,7]缺点:产生大量重复的计算,性能比较差。原创 2025-08-14 19:07:37 · 148 阅读 · 0 评论 -
leetcode49.字母异位词分组
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]字符串 “ate” ,“eat” 和 “tea” 是字母异位词,因为它们可以重新排列以形成彼此。输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]1、全部异位词共性:排序后唯一,可以此作为map的key,此key下的全部异位词组成list。字符串 “nat” 和 “tan” 是字母异位词,因为它们可以重新排列以形成彼此。输出: [[“”]]原创 2025-08-12 19:23:28 · 404 阅读 · 0 评论 -
leetcode35.搜索插入位置
当不存在target元素,总能到达一种状态,left=right=mid,此时,如果mid元素小于target,left=mid+1,越界,此时left位置为target应插入位置;如果mid元素大于target,right=mid-1,越界,此时left位置为target应插入位置;输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。注意边界条件容易出错。原创 2025-08-12 16:33:11 · 125 阅读 · 0 评论 -
leetcode27.移除元素
1、初始的窗口,end=-1(全部的元素都==val),一次循环遍历,如果遇到不等于val的元素,则在end的下一个位置赋值,并且end自增右移;更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输入:nums = [3,2,2,3], val = 3。输出:5, nums = [0,1,4,0,3,原创 2025-08-12 15:55:20 · 379 阅读 · 0 评论 -
leetcode165.比较版本号
需要转义后进行使用:String[] splitStr= str.split(“\.”);version1 的第二个修订号为 “2”,version2 的第二个修订号为 “10”:2 < 10,所以 version1 < version2。比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。输入:version1 = “1.01”, version2 = “1.001”version1 有更少的修订号,每个缺失的修订号按 “0” 处理。忽略前导零,“01” 和 “001” 都代表相同的整数 “1”。原创 2025-08-12 14:49:18 · 343 阅读 · 0 评论 -
java实现统计字符串中每个字符串出现的次数
利用hashmap:import java.util.HashMap;import java.util.Map;import java.util.Objects;import java.util.Scanner;/** 统计字符串里每个字符出现的次数 ”abcaa “ a 3 b 1 c 1 */public class StringDemo1 { public Map<Character,Integer> findCount1(String str){原创 2021-08-28 20:05:45 · 229 阅读 · 0 评论 -
leetcode674-最长连续递增序列
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …当 nums[i]>nums[i−1] 时: nums[i] 可以接在 nums[i−1] 之后(此题要求严格连续递增),此情况下最长上升子序列长度为 dp[i−1]+1;上述所有 1. 情况 下计算出的 dp[i−1]+1 的最大值,为直到 i 的最长上升子序列长度(即 dp[i] )。原创 2025-05-17 21:22:37 · 309 阅读 · 0 评论 -
leetcode438.找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。输入: s = “abab”, p = “ab”输出: [0,1,2]原创 2025-05-24 16:28:11 · 355 阅读 · 0 评论 -
leetcode704.二分查找
一.题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设 n原创 2021-08-29 18:21:57 · 387 阅读 · 0 评论 -
leetcode82.删除排序链表的重复元素Ⅱ
一.题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列二.题目解析和leetcode83题(重复节点只保留一个)不同,本题要求删除全部重复元素,代码在83基础上改动一下即可https://blog.youkuaiyun.com/xun_zh原创 2021-08-29 16:06:43 · 208 阅读 · 0 评论 -
leetcode83.删除排序链表中的重复元素
一.题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列二.题目解析public ListNode deleteDuplicates2(ListNode head) { /*一趟遍历法,时间O(n),空间O(1) 单指针法-删原创 2021-08-28 21:50:43 · 124 阅读 · 0 评论 -
leetcode110.平衡二叉树
一.题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 104二.题目解析public boolean isBalanced(TreeNode root) { /*根据二叉平衡树定义 "一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1"原创 2021-08-25 20:48:16 · 125 阅读 · 0 评论 -
leetcode104.二叉树的最大深度
一.题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。二.题目解析public int maxDepth(TreeNode root) { /*递归算法-深度优先搜索dfs 时间O(n),空间O(h) * */原创 2021-08-24 22:14:13 · 159 阅读 · 0 评论 -
leetcode94.二叉树的中序遍历
一.题目描述给定一个二叉树的根节点 root ,返回它的 中序 遍历。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶: 递归算法很简单,你可以通过迭代算法完成吗?二.题目解析public List<Integer> inorderTraversal(TreeNode root) { /*递归算法 时间复杂度O(n),空间复杂度O(h) * */ Lis原创 2021-08-24 21:40:01 · 148 阅读 · 0 评论 -
leetcode103- 二叉树的锯齿形层序遍历
一.题目描述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]二.题目解析这个题目实际上是leetcode102题的变形:https://blog.youkuaiyun.com/xun_zhao_t521/article/details/119879199原创 2021-08-24 20:43:34 · 159 阅读 · 0 评论 -
leetcode102.二叉树的层序遍历
一.题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层序遍历结果:[[3],[9,20],[15,7]]二.题目解析public List<List<Integer>> levelOrder1(TreeNode root) { /*迭代-广度优先搜索 利用队原创 2021-08-23 22:32:10 · 238 阅读 · 0 评论 -
leetcode518.爬楼梯
一.题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶二.题目解析1.递归public int climbStairs1(int n) {原创 2021-08-21 21:47:37 · 166 阅读 · 0 评论 -
leetcode198.打家劫舍
一.题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2原创 2021-08-21 21:09:18 · 132 阅读 · 0 评论 -
leetcode62.不同路径
一.题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下 -> 向原创 2021-08-21 20:06:17 · 108 阅读 · 0 评论 -
leetcode221.最大正方形
一.题目描述在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:4输入:matrix = [[“0”,“1”],[“1”,“0”]]输出:1输入:matrix = [[“0”]]输出:0提示:m == matrix.lengthn == m原创 2021-08-20 21:07:21 · 269 阅读 · 0 评论 -
leetcode64.最小路径和
一.题目描述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12二.题目解析1.记忆化递归public int minPathSum(int[][] grid) { retu原创 2021-08-19 22:24:31 · 256 阅读 · 0 评论 -
leetcode322.零钱兑换
一.题目描述给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount原创 2021-08-19 21:07:51 · 328 阅读 · 0 评论 -
leetcode1143.最长公共子序列
一.题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”, text2原创 2021-08-18 19:37:06 · 153 阅读 · 0 评论 -
leetcode718.最长重复子数组
一.题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100二.题目解析1.暴力法public int findLength1(int[] nums1, int[] nums2) { /原创 2021-08-17 18:00:07 · 193 阅读 · 0 评论 -
leetcode121.买卖股票的最佳时机
一.题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不原创 2021-08-16 19:51:02 · 109 阅读 · 0 评论 -
leetcode300.最长递增子序列
一.题目描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7原创 2021-08-16 16:44:58 · 183 阅读 · 0 评论 -
leetcode53.最大子序和
一.题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000提示:1 &原创 2021-08-15 21:04:48 · 151 阅读 · 0 评论 -
排序奇升偶降链表
一.题目描述给定一个奇数位升序,偶数位降序的链表,将其重新排序。输入: 1->8->3->6->5->4->7->2->NULL输出: 1->2->3->4->5->6->7->8->NULL二.题目解析1.分别是拆分链表,反转链表,合并两个有序链表三个问题的结合/** 排序奇升偶降链表: 给定一个奇数位升序,偶数位降序的链表,将其重新排序为升序链表。 */public class Solut原创 2021-08-13 21:10:15 · 1121 阅读 · 0 评论 -
leetcode148.排序链表
一.题目描述给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?输入:head = [4,2,1,3]输出:[1,2,3,4]输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]输入:head = []输出:[]提示:链表中节点的数目在范围 [0, 5 * 104] 内-105 <= Node.val <= 105二.题目解析pub原创 2021-08-12 21:54:08 · 144 阅读 · 0 评论 -
leetcode2.两数相加
一.题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.输入:l1 = [0], l2 = [0]输出:[0]输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输原创 2021-08-11 16:39:19 · 88 阅读 · 0 评论 -
leetcode19.删除链表的倒数第N个节点
一.题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]输入:head = [1], n = 1输出:[]输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz二.题目解析1.两趟扫描p原创 2021-08-10 21:57:45 · 113 阅读 · 1 评论 -
leetcode160.相交链表
一.题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘8’解释:相交节点的值为 8 (注意,如果两个链表相交则原创 2021-08-10 20:32:43 · 154 阅读 · 0 评论 -
leetcode142.环形链表Ⅱ
一.题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接原创 2021-08-09 22:14:03 · 183 阅读 · 0 评论 -
leetcode141-环形链表
一.题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?输入:head = [3,2,0,-4], p原创 2021-08-09 20:42:02 · 133 阅读 · 0 评论 -
leetcode21-合并两个有序链表
一.题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]输入:l1 = [], l2 = []输出:[]输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列二.题目解析public static原创 2021-08-08 22:53:06 · 148 阅读 · 0 评论