leetcode-java
文章平均质量分 63
约定写代码
虽然8年前开始学习更好,但今天开始学习,总要好过明天再开始。
展开
-
二分搜索模板
翻了一下自己的博客。记录了花花酱的二分搜索模板、王争的二分搜索模板。花花酱的文章中提到:不要试图去找一个正确答案。试图去找一个分割点m,使得x>=m,g(x)>0为true。这个始终get不到。王争的二分模板思路是比较简单的,就是时间长了,忘记了。考虑边界值的时候,是在代码逻辑中考虑,容易理解。接下来记录一下labuladong的二分搜索模板。1 查找目标值简单二分,查找目标值。int binarySearch(int[] nums, int target) { int le原创 2021-07-30 09:15:52 · 210 阅读 · 0 评论 -
140. Word Break II
文章目录1 题目理解2 回溯+记忆化1 题目理解140与130的区别是,当字符串可分的时候,要求返回具体的分割字符串。2 回溯+记忆化对于字符串s,如果前面一部分是单词列表中的词,则拆分出这个单词,右边的继续分割。分割过程中,对起始下标i,已经分割过的,用map缓存。使用字典树也可以加快搜索速度。class Solution { private Trie trie; private List<String> result; public List<S原创 2021-01-02 23:29:20 · 207 阅读 · 2 评论 -
1048. Longest String Chain
文章目录1题目理解2 动态规划1题目理解输入:字符串数组words,字符串只包含小写字母规则:对于word1和word2,如果在word1中任何一个位置添加一个字符能够得到word2,那么可以称word1为word2的前身。词链是单词 [word_1, word_2, …, word_k] 组成的序列,k >= 1,其中 word_1 是 word_2 的前身,word_2 是 word_3 的前身,依此类推。输出:从words中选择词组成词链,词链可能的最长的长度。Example 1:I原创 2021-01-02 22:50:11 · 244 阅读 · 0 评论 -
673. Number of Longest Increasing Subsequence
文章目录1 题目理解2 动态规划1 题目理解Given an integer array nums, return the number of longest increasing subsequences.Notice that the sequence has to be strictly increasing.输入:整数数组int[] nums输出:最长递增子序列的个数规则:子序列是指从原数组中找出若干元素组成新的数组。这些元素不一定是下标相邻的,但是元素前后顺序不能变。递增子序列就是新的原创 2021-01-02 17:23:07 · 180 阅读 · 0 评论 -
300. Longest Increasing Subsequence
文章目录1 题目理解2 动态规划3 二分+贪心1 题目理解Given an integer array nums, return the length of the longest strictly increasing subsequence.A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the re原创 2021-01-02 08:34:54 · 276 阅读 · 0 评论 -
790. Domino and Tromino Tiling
文章目录1 题目理解2 动态规划1 题目理解We have two types of tiles: a 2x1 domino shape, and an “L” tromino shape. These shapes may be rotated.XX <- dominoXX <- “L” trominoXGiven N, how many ways are there to tile a 2 x N board? Return your answer modulo 10^9 +原创 2020-12-31 11:49:48 · 323 阅读 · 0 评论 -
740. Delete and Earn
1 题目Given an array nums of integers, you can perform operations on the array.In each operation, you pick any nums[i] and delete it to earn nums[i] points. After, you must delete every element equal to nums[i] - 1 or nums[i] + 1.You start with 0 points.原创 2020-12-31 00:34:40 · 177 阅读 · 0 评论 -
309. Best Time to Buy and Sell Stock with Cooldown
1 题目理解Say you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times) wi原创 2020-12-31 00:11:40 · 152 阅读 · 0 评论 -
120. Triangle
文章目录1 题目理解2 解题2.1 动态规划2.2 优化空间2.3进一步优化空间1 题目理解Given a triangle array, return the minimum path sum from top to bottom.For each step, you may move to an adjacent number on the row below.输入:一个三角形数组List<List> triangle输出:从顶层走到底层最小路径和规则:每次只能从上一层走到下一层原创 2020-12-30 07:23:48 · 247 阅读 · 0 评论 -
63. Unique Paths II and 64. Minimum Path Sum
文章目录1 63 Unique Paths II1.1 题目描述1.2 动态规划解决2 64. Minimum Path Sum2.1 题目理解2.2 动态规划这一遍刷dp的题目就很轻松了。1 63 Unique Paths II1.1 题目描述A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).The robot can only move either d原创 2020-12-29 23:39:16 · 316 阅读 · 0 评论 -
303. Range Sum Query - Immutable
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.Implement the NumArray class:NumArray(int[] nums) Initializes the object with the integer array nums.int sumRange(int i, int j) Return the sum of the el原创 2020-12-29 12:46:32 · 102 阅读 · 0 评论 -
1218. 最长定差子序列
文章目录1 题目理解2 开始思考1 题目理解给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。输入:整数数组arr, 整数difference输出:最长等差子序列的长度规则:这个等差子序列相邻元素的差等于difference示例 1:输入:arr = [1,2,3,4], difference = 1输出:4解释:最长的等差子序列是 [1,2,3,4]。示例 2:输入:ar原创 2020-12-29 06:56:01 · 393 阅读 · 0 评论 -
315. Count of Smaller Numbers After Self
文章目录1 题目理解2 暴力解法3 分治法1 题目理解输入:int[] nums输出:计数的数组int[] counts规则:counts[i]表示nums中下标大于i,值小于nums[i]的个数Example 1:Input: nums = [5,2,6,1]Output: [2,1,1,0]Explanation:To the right of 5 there are 2 smaller elements (2 and 1).To the right of 2 there is o原创 2020-12-25 23:40:44 · 422 阅读 · 0 评论 -
842. Split Array into Fibonacci Sequence
文章目录1 题目理解2 回溯1 题目理解输入:一个数字字符串S。例如S=“123456579”。规则:我们可以把这个字符串分割为菲波那切数列,例如:[123, 456, 579]。一个菲波那切数列需要符合以下条件:1 0<=F[i]<=231−10 <= F[i] <= 2^31 - 10<=F[i]<=231−1,也就是正整数2 F[i] + F[i+1] = F[i+2] for all 0 <= i < F.length - 2.3 在切原创 2020-12-24 08:52:09 · 133 阅读 · 0 评论 -
241. Different Ways to Add Parentheses
文章目录1 题目理解2 分治法1 题目理解输入:字符串input,包含数字和操作符规则:给input的不同位置加括号,使得input可以得到不同的计算结果。输出:返回可能的计算结果Example 1:Input: “2-1-1”Output: [0, 2]Explanation:((2-1)-1) = 0(2-(1-1)) = 22 分治法文章参考力扣官网。对于形如 x op y 的运算式而言,它的结果取决于 x和y结果的组合数。而 x和y又别分可以写成 x op y 这样的运算原创 2020-12-23 22:39:13 · 163 阅读 · 0 评论 -
131. Palindrome Partitioning
文章目录1 题目理解2 回溯3 动态规划1 题目理解输入:字符串s规则:将字符串s分割,分割后每一个部分都是一个回文串。输出:所有的分割方式Example 1:Input: s = “aab”Output: [[“a”,“a”,“b”],[“aa”,“b”]]Example 2:Input: s = “a”Output: [[“a”]]2 回溯例如s=‘aab’处理第0个字符a:a是回文吗?是继续处理(第1个字符) &nb原创 2020-12-23 16:40:14 · 232 阅读 · 0 评论 -
93. Restore IP Addresses
文章目录1 题目理解2 回溯1 题目理解输入:字符串s输出:可能的ip地址规则:一个有效的ip地市是一连串数字,数字范围在0到255,每个数字不能有前导0。例如"0.1.2.201" and "192.168.1.1"是有效ip地址。"0.011.255.245"不是有效地址。“192.168.1.312” and "192.168@1.1"也不是有效地址。Example 1:Input: s = “25525511135”Output: [“255.255.11.135”,“255.255.原创 2020-12-23 14:31:31 · 151 阅读 · 0 评论 -
752. Open the Lock
文章目录1 题目理解2 BFS1 题目理解一个钟表有4个槽,每个槽可以停在0-9,10个状态。钟表每个槽的轮子可以转,例如可以从0转到9,也可以从0转到1。钟表的起始状态是"0000"。每个数字代表一个槽的状态。输入:字符串数组deadends,表示不能死亡状态,进入这个状态钟表就被锁住了,不能动了。输入字符串target表示想要达到的状态。输出:到达最终状态的最少需要多少步。如果不能达到则为-1。规则:每一步,钟表只能转动一个槽,只能转一下,例子:Input: deadends = [“0原创 2020-12-19 14:18:54 · 163 阅读 · 1 评论 -
126. Word Ladder II
文章目录1 题目理解2 BFS1 题目理解题目要求和127是一样的。返回值不一样。返回值要求把最短路径的,具体路径输出。Input:beginWord = “hit”,endWord = “cog”,wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”]Output:[[“hit”,“hot”,“dot”,“dog”,“cog”],[“hit”,“hot”,“lot”,“log”,“cog”]]2 BFS因为要返回具体的路径。需要修改的地方原创 2020-12-19 09:14:53 · 134 阅读 · 1 评论 -
127. Word Ladder
文章目录1 题目理解2 BFS1 题目理解给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。输入:两个单词:beginWord原创 2020-12-19 07:01:24 · 257 阅读 · 2 评论 -
79. Word Search
文章目录1题目理解2 回溯1题目理解Given an m x n board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cells, where “adjacent” cells are horizontally or vertically neighboring. The same letter cell may n原创 2020-12-18 15:33:22 · 381 阅读 · 0 评论 -
51. N-Queens
文章目录1 题目理解2 回溯2.1 直观解法2.2 按行遍历1 题目理解The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.Given an integer n, return all distinct solutions to the n-queens puzzle.Each solution contains原创 2020-12-18 14:41:53 · 170 阅读 · 0 评论 -
37. Sudoku Solver
文章目录1 题目理解2 回溯1 题目理解Write a program to solve a Sudoku puzzle by filling the empty cells.A sudoku solution must satisfy all of the following rules:Each of the digits 1-9 must occur exactly once in each row.Each of the digits 1-9 must occur exactly once原创 2020-12-18 12:00:03 · 266 阅读 · 0 评论 -
22. Generate Parentheses
文章目录1 题目理解2 回溯1 题目理解Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.输入:整数n输出:格式良好的()字符串,长度为2*n规则:格式良好就是左右括号匹配是正确的。Example 1:Input: n = 3Output: ["((()))","(()())","(())()","()(())","()()()"]2原创 2020-12-18 09:04:26 · 114 阅读 · 0 评论 -
996. Number of Squareful Arrays
文章目录1 题目理解2 回溯分析1 题目理解Given an array A of non-negative integers, the array is squareful if for every pair of adjacent elements, their sum is a perfect square.Return the number of permutations of A that are squareful. Two permutations A1 and A2 differ i原创 2020-12-16 17:09:39 · 129 阅读 · 0 评论 -
784. Letter Case Permutation
文章目录1 题目理解2 回溯1 题目理解Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string.Return a list of all possible strings we could create. You can return the output in any order.输入:字符串输出:字符串可能的变形规则:每原创 2020-12-16 12:30:05 · 118 阅读 · 0 评论 -
46. Permutations
文章目录1题目理解2 回溯1题目理解Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.输入:整数数组nums输出:数组的所有可能的排列例如:Input: nums = [1,2,3]Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]2 回溯所原创 2020-12-15 14:55:52 · 157 阅读 · 1 评论 -
78. Subsets
文章目录1 题目理解2 回溯90 subset II方式一代码方式三代码1 题目理解Given an integer array nums, return all possible subsets (the power set).The solution set must not contain duplicate subsets.输入:int数组nums输出:返回所有可能的子数组,不能重复例如Input: nums = [1,2,3]Output: [[],[1],[2],[1,2],[3原创 2020-12-15 10:19:34 · 121 阅读 · 0 评论 -
77. Combinations
文章目录class Solution { private List<List<Integer>> answer; private int n; public List<List<Integer>> combine(int n, int k) { answer = new ArrayList<List<Integer>>(); this.n = n; List<原创 2020-12-14 16:36:43 · 249 阅读 · 0 评论 -
17. Letter Combinations of a Phone Number
1 题目理解给定一个字符串string,字符范围是[2,9]之间的数字。数字表示电话上的一个按钮。返回字符串的可能所有组合方式。每个数字对应的字母如下图所示。Example 1:Input: digits = “23”Output: [“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]Example 2:Input: digits = “”Output: []Example 3:Input: digits = “2”Output: [“a”,“b原创 2020-12-02 08:58:08 · 168 阅读 · 0 评论 -
4. Median of Two Sorted Arrays
文章目录1题目理解2 二分查找解题2.1中位数的定义2.2 数组切分1题目理解输入:2个已经排序号的int数组nums1,nums2输出:这两个数组合并后的中位数要求:m是nums1的长度,n是nums2的长度。时间复杂度应该是O(log(m+n))。例子:nums1 = [1, 3]nums2 = [2]The median is 2.0nums1 = [1, 2]nums2 = [3, 4]The median is (2 + 3)/2 = 2.52 二分查找解题这道题目如果不原创 2020-11-29 14:54:44 · 350 阅读 · 0 评论 -
875. Koko Eating Bananas
1 题目理解输入:koko是个猴子,喜欢吃香蕉。输入int[] piles,表示有n堆香蕉,每堆香蕉有piles[i]个。koko喜欢慢慢吃香蕉,但还是希望在H个小时内把香蕉吃完。因为H小时之后,管理员就回来了,他就不能吃香蕉了。输出:最小的吃香蕉的速度。2 二分要找到值x,既要可以吃完香蕉,又要是最低速度,按照二分模块,g(x)=能吃完。这里需要注意的是:一堆香蕉可以吃多个小时。class Solution { public int minEatingSpeed(int[] piles原创 2020-11-25 12:23:00 · 179 阅读 · 0 评论 -
74. Search a 2D Matrix
文章目录1 题目理解2 二分1 题目理解输入:一个mxn的int数组matrix,这个数组每一行按照从小到大排序,并且下一行的第一个值大于上一行的最后一个值。一个int值target返回:target在matrix中是否存在。存在返回true。2 二分我们可以把这个数组看做是一个有序数组。数组下表从0到m*n-1。class Solution { public boolean searchMatrix(int[][] matrix, int target) { if(m原创 2020-11-25 08:48:50 · 125 阅读 · 0 评论 -
69. Sqrt(x)
1 题目理解输入一个x,返回这个数据的平方根。如果平方跟不是整数,就只取整数部分。例如x=4,返回2;x=8,返回2。2 二分套用模板,要找一个g(x)函数。g(m)=m*m>x,找这个函数的最小值。一个数的平方比x大,这样的最小值,减1,就是返回值。class Solution { public int mySqrt(int x) { long l = 1, r = x/2+1; while(l<=r){ long m原创 2020-11-24 17:49:29 · 112 阅读 · 0 评论 -
162. Find Peak Element
文章目录1 题目理解2 线性扫描3 二分查找1 题目理解输入:int[] nums并且 nums[i]!=nums[i+1]输出:找到称为峰值的那个数字,返回其下标。规则:峰值是指:nums[i-1]<nums[i] 并且 nums[i+1]<nums[i]。你可以认为nums[-1] = nums[n] = -∞.只要返回其中的一个峰值下标即可。2 线性扫描参考网址我们可以利用nums[i-1]<nums[i],nums[i+1]<nums[i]找到峰值。当我们遇到一原创 2020-11-24 11:48:40 · 154 阅读 · 0 评论 -
8. String to Integer (atoi)
1题目理解输入:一个字符串s,可能包含空格、正负号、数字,还有其他字符。输出:将字符串转为int规则:字符串s一开始可能有很多空格,可以忽略这些空格,直到遇到第一个非空字符。从这个字符开始,根据正负号返回int数字。从开始计数起,也可能会遇到其他字符,忽略。这些字符对答案没有影响。如果第一个非空格字符不是数字或者正负号,或者字符串中不存在有效的int表示形式,则返回0,不参与计算。如果计算的数字超出了整数范围,则返回INT_MAX(231−1)INT\_MAX (2^{31} − 1)INT_M原创 2020-11-02 11:13:59 · 847 阅读 · 0 评论 -
151. Reverse Words in a String
1 题目理解输入:一个字符串s规则:一个单词是一串非空字符组成的。单词之间用空格分隔。输出:将字符串按照单词反转字符串。多余的空格只保留一个。Example 1:Input: s = “the sky is blue”Output: “blue is sky the”Example 2:Input: s = " hello world "Output: “world hello”解释:收尾的多余空格要去掉。Example 3:Input: s = “a good exam原创 2020-10-31 12:53:28 · 125 阅读 · 0 评论 -
239. Sliding Window Maximum
文章目录1理解题目2 思路2.1暴力求解2.2双端队列1理解题目输入:整数数组nums,滑动窗口大小k输出:整数数组规则:在一个窗口内只能看到k个数,找一个最大的数,添加到返回数组中。每次滑动向右滑动一步。Input: nums = [1,3,-1,-3,5,3,6,7], k = 3Output: [3,3,5,5,6,7]Explanation:Window position Max[1 3 -1] -3 5 3 6 7 31原创 2020-10-21 23:49:05 · 137 阅读 · 0 评论 -
641. Design Circular Deque
1 题目理解要求设计一个双端循环队列。这个队列能支持以下操作:MyCircularDeque(k): Constructor, set the size of the deque to be k.insertFront(): Adds an item at the front of Deque. Return true if the operation is successful.insertLast(): Adds an item at the rear of Deque. Return true原创 2020-10-21 23:08:27 · 118 阅读 · 0 评论 -
150 Evaluate Reverse Polish
1题目理解输入:一个字符串数组。这个字符串数组表示算数运算的逆波兰表示法。一般算数表示方法是2+1,逆波兰表示是2 1 +。输出:一个int值。Example 1:Input: [“2”, “1”, “+”, “3”, “*”]Output: 9Explanation: ((2 + 1) * 3) = 9Example 2:Input: [“4”, “13”, “5”, “/”, “+”]Output: 6Explanation: (4 + (13 / 5)) = 6Example 3原创 2020-10-16 14:05:59 · 116 阅读 · 0 评论