自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 LeetCode(cai鸟之路)139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以由 “leet” 和 “code” 拼接成。输入: s = “applepenapple”, wordDict = [“apple”, “pen”]输出

2022-06-22 22:25:27 120 1

原创 LeetCode(cai鸟之路)136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗输入: [2,2,1]输出: 1输入: [4,1,2,1,2]输出: 4分析题目要求时间复杂度为线性,不能使用额外的空间复杂度要是没有这个条件肯定很好做,简单的暴力题目。但是题目有要求,那就要采用别的方法。想到了采用异或的思路,如果一个数为 ii ^ 0 = i;i ^ i = 0;来源:力扣(LeetCode)

2022-06-22 21:53:17 283

原创 LeetCode(cai鸟之路)96. 不同的二叉搜索树

题目描述给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例输入:n = 3输出:5输入:n = 1输出:1代码:class Solution { //static HashMap<Integer,Integer> hashMap = new HashMap<>(); public static int numTrees(int n) { if (n

2022-05-15 22:43:42 90

原创 LeetCode(cai鸟之路)121. 买卖股票的最佳时机

题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-

2022-05-15 10:38:36 87

原创 LeetCode(cai鸟之路)84. 柱状图中最大的矩形

题目描述给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10代码1(超时了,但是算法思路是对的):public class Solution84 { public static int largestRectangleArea(int[] heights) { int

2022-05-14 22:25:18 242

原创 LeetCode(cai鸟之路)79 单词搜索

题目描述给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输出:true输入:boa

2022-05-09 21:22:59 169

原创 LeetCode(cai鸟之路)78 子集

题目描述给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]代码:class Solution { public static List<List<Integer>> subsets(int[] nums) { List<Li

2022-05-07 22:26:44 227

原创 LeetCode(cai鸟之路)75 颜色分类

题目描述给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。示例输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]代码:class Solution { public static void sortColors(int[] nums) { int

2022-05-05 22:56:06 128

原创 LeetCode(cai鸟之路)72 编辑距离

题目描述给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)输入:word1 = “intention”,

2022-05-05 22:52:53 107

原创 LeetCode(cai鸟之路)70 爬楼梯

题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例输入:n = 2输出:2解释:有两种方法可以爬到楼顶。输入:n = 3输出:3解释:有三种方法可以爬到楼顶。代码:class Solution { public static int climbStairs(int n) { int[] dp = new int[45]; dp[0] = 1; dp[1] =

2022-05-05 22:48:47 104

原创 LeetCode(cai鸟之路)64 最小路径和

题目描述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。输入:grid = [[1,2,3],[4,5,6]]输出:12代码:class Solution { public static int minPathSum(int[][] grid)

2022-05-05 22:44:22 114

原创 LeetCode(cai鸟之路)62 不同路径

题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例输入:m = 3, n = 7输出:28输入:m = 3, n = 2输出:3代码:class Solution { public static int uniquePaths(int m, int n) { int[][] grid = ne

2022-05-05 22:40:18 130

原创 LeetCode(cai鸟之路)56 合并区间

题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入:intervals = [[1,4],[4,5]]输

2022-05-04 22:06:21 62

原创 LeetCode(cai鸟之路)55 跳跃游戏

题目描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。代码:cl

2022-05-04 21:58:00 160

原创 LeetCode(cai鸟之路)53 最大子数组和

题目描述给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。输入:nums = [1]输出:1输入:nums = [5,4,-1,7,8]输出:23代码:class Solution { public static int maxSubArray(int[

2022-05-04 21:47:37 125

原创 LeetCode(cai鸟之路)49 字母异位词分组

题目描述给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。示例输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]输入: strs = [“”]输出: [[“”]]输入: strs = [“a”]输出: [[“a”]]代码:

2022-05-03 21:59:25 297

原创 LeetCode(cai鸟之路)48 旋转图像

题目描述给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3

2022-05-03 21:49:25 185

原创 LeetCode(cai鸟之路)46 全排列

题目描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]输入:nums = [0,1]输出:[[0,1],[1,0]]输入:nums = [1]输出:[[1]]代码:class Solution { private static List<List<Integer>> li

2022-05-03 21:43:02 212

原创 LeetCode(cai鸟之路)45 跳跃游戏 II

题目描述给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。输入: nums = [2,3,0,1,4]输出: 2代码:class Solution {

2022-05-03 21:01:56 59

原创 LeetCode(cai鸟之路)415 字符串相加

题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。示例输入:num1 = “11”, num2 = “123”输出:“134”输入:num1 = “456”, num2 = “77”输出:“533”输入:num1 = “0”, num2 = “0”输出:“0”代码:class Solution { public static

2022-04-25 21:48:25 53

原创 LeetCode(cai鸟之路)43 字符串相乘

题目描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意: 不能使用任何内置的 BigInteger 库或直接将输入转换为整数。提示:1 <= num1.length, num2.length <= 200num1 和 num2 只能由数字组成。num1 和 num2 都不包含任何前导零,除了数字0本身。示例输入: num1 = “2”, num2 = “3”输出: “6”输入: num1

2022-04-25 21:39:19 172

原创 LeetCode(cai鸟之路)42 接雨水

题目描述给定 n 个非负整数表示每个宽度为 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 个单位的雨水(蓝色部分表示雨水)。先上代码(单调栈):class Solution { public static int trap(int[] height) { i

2022-04-23 21:44:44 54

原创 LeetCode(cai鸟之路)41 缺失的第一个正数

题目描述给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例输入:nums = [1,2,0]输出:3输入:nums = [3,4,-1,1]输出:2输入:nums = [7,8,9,11,12]输出:1先上代码:class Solution { public static int firstMissingPositive(int[] nums) { Arrays

2022-04-21 22:57:16 46

原创 LeetCode(cai鸟之路)38 外观数列

题目描述给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”

2022-04-21 21:26:58 59

原创 LeetCode(cai鸟之路)36 有效的数独

题目描述请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用 ‘.’ 表示。示例输入:board =[[“5”,“3”,“.”,“.”,“7”,“.”,“.”,“.”,“.”

2022-04-20 09:37:20 55

原创 LeetCode(cai鸟之路)35 搜索插入位置

题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例输入: nums = [1,3,5,6], target = 5输出: 2输入: nums = [1,3,5,6], target = 2输出: 1输入: nums = [1,3,5,6], target = 7输出: 4先上代码:class Solution { public static int s

2022-04-19 21:50:39 133

原创 LeetCode(cai鸟之路)34 在排序数组中查找元素的第一个和最后一个位置

题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。示例输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0输出:[-1,-1]先上代码:class Solution { pub

2022-04-19 21:44:42 48

原创 LeetCode(cai鸟之路)33 搜索旋转排序数组

题目描述整数数组 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 和一个

2022-04-19 21:30:29 45

原创 LeetCode(cai鸟之路)32 最长有效括号

题目描述给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例输入:s = “(()”输出:2解释:最长有效括号子串是 “()”输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”输入:s = “”输出:0先上代码:class Solution { public static int longestValidParentheses(String s) { int maxans = 0;

2022-04-17 22:16:42 293

原创 LeetCode(cai鸟之路)28 实现 strStr()

题目描述实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。示例输入:haystack = “hello”, needle = “ll”输出:2输入:haystack = “aaaaa”, needle = “bba”输出:-1输入:haystack = “”, needle = “”输出:0先上代码:class Solution

2022-04-14 10:19:49 357 3

原创 LeetCode(cai鸟之路)27 移除元素

题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2

2022-04-14 10:12:13 32

原创 LeetCode(cai鸟之路)26 删除有序数组中的重复项

题目描述给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例输入:

2022-04-14 10:03:22 177

原创 LeetCode(cai鸟之路)25 K 个一组翻转链表

题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]先上代码:/** * Definition for singly-linked list. * public class Lis

2022-04-14 09:53:10 35

原创 LeetCode(cai鸟之路)24 两两交换链表中的节点

题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例输入:head = [1,2,3,4]输出:[2,1,4,3]输入:head = []输出:[]输入:head = [1]输出:[1]先上代码-Method 1:/** * Definition for singly-linked list. * public class ListNode { * int val; *

2022-04-14 09:48:04 863

原创 LeetCode(cai鸟之路)23 合并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输入:lists = []输出:[]输入:lists

2022-04-12 10:10:16 36

原创 LeetCode(cai鸟之路)19 删除链表的倒数第 N 个结点

题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]输入:head = [1], n = 1输出:[]输入:head = [1,2], n = 1输出:[1]先上代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;

2022-04-11 19:10:22 495

原创 LeetCode(cai鸟之路)18 四数之和

题目描述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target可以按 任意顺序 返回答案 。示例输入:nums = [1,0,

2022-04-11 18:34:22 743

原创 LeetCode(cai鸟之路)17 电话号码的字母组合

题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]输入:digits = “”输出:[]输入:digits = “2”输出:[“a”,“b”,“c”]提示:0 <= digits.length <= 4digits[i

2022-04-11 10:18:27 79

原创 LeetCode(cai鸟之路)20 有效的括号

题目描述给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例输入:s = “()”输出:true输入:s = “()[]{}”输出:true输入:s = “(]”输出:false提示:1 <= s.length <= 104s 仅由括号 ‘()[]{}’ 组成先上代码:class Solution { public bo

2022-04-11 09:29:35 34

原创 LeetCode(cai鸟之路)16 最接近的三数之和

题目描述给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。示例输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。输入:nums = [0,0,0], target = 1输出:0提示:3 <= nums.length <= 1000-1

2022-04-10 22:08:35 710

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除