LeetCode
钟期何遇
这个作者很懒,什么都没留下…
展开
-
LeetCode日记 76.最小覆盖子串
class Solution { public String minWindow(String s, String t) { if (s == null || t == null || s.length() == 0 || t.length() == 0) return ""; int[] freq = new int[128];//要匹配的字符的频次 char[] cht = t.toCharArray(); char[].原创 2020-10-10 21:10:43 · 143 阅读 · 0 评论 -
LeetCodes日记438.找到字符串中所有字母异位词
题目来源:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/class Solution { public List<Integer> findAnagrams(String s, String p) { char[] chS = s.toCharArray(); char[] chP = p.toCharArray(); int[] freq = new in.原创 2020-10-10 19:03:21 · 191 阅读 · 1 评论 -
LeetCode日记 75.颜色分类
颜色分类(来源:https://leetcode-cn.com/problems/sort-colors/)给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代.原创 2020-09-09 16:51:52 · 118 阅读 · 0 评论 -
LeetCode日记 3.无重复字符的最长子串
无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke".原创 2020-09-06 22:49:53 · 102 阅读 · 0 评论 -
LeetCode 日记 209. 长度最小的子数组
长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。class Solution { public int minSubArrayLen(int s, int[] nums) { if(nums.length == .原创 2020-09-06 20:58:39 · 106 阅读 · 0 评论 -
LeetCode日记 42.接雨水
接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路:单调栈,参考了题解:https://leetcode-cn.com/problems/trapping-rain-water/soluti.原创 2020-09-04 14:45:22 · 120 阅读 · 0 评论 -
LeetCode日记 239.滑动窗口的最大值
题目描述:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: 滑动窗口的位置 最大值--------------- -----[1 3原创 2020-07-29 18:35:11 · 111 阅读 · 0 评论 -
LeetCode 日记 62.不同路径
题目链接:https://leetcode-cn.com/problems/unique-paths/思路:class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int [m][n]; //dp[i][j]]表示到坐标(i,j)的路径有多少种 for(int i = 0;i < n ;i++){ dp[0][i] = 1;.原创 2020-07-29 17:55:30 · 133 阅读 · 0 评论 -
LeetCode日记 343.整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/integer-break著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2020-07-29 16:37:54 · 155 阅读 · 0 评论 -
LeetCode日记 64.最小路径
题目描述:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出原创 2020-07-29 15:16:54 · 117 阅读 · 0 评论 -
LeetCode日记 120.三角形最小路径和
题目描述:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/triangl原创 2020-07-29 14:26:03 · 139 阅读 · 0 评论 -
LeetCode日记 300.最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-subsequence著作权归领扣网络所有。商业转载原创 2020-07-27 22:50:32 · 118 阅读 · 0 评论 -
LeetCode日记 392.判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = “abc”, t = “ahbgdc”返回 true.示例 2:s = “axc”, t = “ahbgdc原创 2020-07-27 21:17:57 · 100 阅读 · 0 评论 -
LeetCode日记 41.缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/first-missing-positive著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路参考题解区:class Solution {原创 2020-07-26 16:08:08 · 111 阅读 · 0 评论 -
LeetCode日记 442.数组中重复的数据
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明原创 2020-07-26 14:54:00 · 134 阅读 · 0 评论 -
LeetCode日记 448.寻找所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-all-numbers原创 2020-07-26 10:45:30 · 102 阅读 · 0 评论 -
LeetCode日记 55.跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。来源:力扣(Lee原创 2020-07-25 15:00:01 · 102 阅读 · 0 评论 -
LeetCode 日记287.寻找重复数
题目描述给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次来源:力扣(LeetCode)链接:https:/原创 2020-07-20 18:04:17 · 122 阅读 · 0 评论 -
LeetCode 日记 124.二叉树的最大路径和
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/b原创 2020-07-19 17:32:57 · 137 阅读 · 0 评论 -
LeetCode 日记 146.汉明距离
汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置思路:将x,y按位异或得到res,将问题转化为求i的二进制位中1的个数countclass Solution { public int.原创 2020-07-19 16:59:29 · 153 阅读 · 0 评论 -
LeetCode日记 122.买卖股票的最佳时机II
题目来源:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/思路参考题解:class Solution { public int maxProfit(int[] prices) { if (prices == null||prices.length <2){ return 0; } int sumProfit =原创 2020-07-18 22:20:37 · 99 阅读 · 0 评论 -
LeetCode 152.乘积最大子数组
题目来源:https://leetcode-cn.com/problems/maximum-product-subarray/思路:参考题解解题方案思路标签:动态规划遍历数组时计算当前最大值,不断更新令imax为当前最大值,则当前最大值为 imax = max(imax * nums[i], nums[i])由于存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值imin,imin = min(imin * nums[i], nums[i])当负数出现时则imax与原创 2020-07-17 16:54:11 · 172 阅读 · 0 评论 -
LeetCode日记 229.求众数II
题目来源:https://leetcode-cn.com/problems/majority-element/class Solution { public List<Integer> majorityElement(int[] nums) { if(nums == null||nums.length == 0){ return new ArrayList(); } int res1 = nums[0];原创 2020-07-17 16:18:42 · 133 阅读 · 0 评论 -
LeetCode 日记 169.多数元素
题目来源:https://leetcode-cn.com/problems/majority-element/思路:摩尔投票法class Solution { public int majorityElement(int[] nums) { int len = nums.length; if(len == 0){ return 0; } int res = nums[0];原创 2020-07-17 15:52:07 · 105 阅读 · 0 评论 -
LeetCode 日记 20.有效的括号
class Solution { private static Map<Character,Character> map = new HashMap<Character,Character>(); public Solution() { map.put('#','#'); map.put('(',')'); map.put('{','}'); map.put('[',']'); ..原创 2020-07-17 14:49:58 · 112 阅读 · 0 评论 -
LeetCode日记 198.打家劫舍
题目来源:https://leetcode-cn.com/problems/house-robber/思路:class Solution { public int rob(int[] nums) { if (nums == null||nums.length == 0){ return 0; } if(nums.length == 1){ return nums[0]; }原创 2020-07-16 16:35:16 · 99 阅读 · 0 评论 -
LeetCode 日记 234.回文链表
思路:先找到两个链表的中间节点,以此为界,分为两个链表,将后半部分链表反转。然后逐个比较两链表的值。不一样,就不接着比较了。比较完将链表恢复原状。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public b.原创 2020-07-16 15:46:00 · 110 阅读 · 0 评论 -
LeetCode日记 146.LRU缓存机制
class LRUCache { class Node{ int key; int val; Node pre; Node next; public Node(){} public Node(int key,int val){ this.key = key; this.val = val; } } private in.原创 2020-07-15 22:54:01 · 116 阅读 · 0 评论 -
LeetCode日记 350.两个数组的交集II
题目来源:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/1.思路:先将两个数组排好序,用两个指针s1,s2分别同时遍历两个数组,如果两个指针指向的数相同,就一起后移并将结果存入list中。nums[s1]<nums[s2],那就s1后移;nums[s1]>nums[s2],就s2后移。最后遍历list,将结果集存放到数组中。时间复杂度:O(m log m+n log n)空间复杂度:O(min(m,n))c.原创 2020-07-13 22:25:48 · 147 阅读 · 0 评论 -
LeetCode日记 15. 三数之和
题目来自:https://leetcode-cn.com/problems/3sum/参考题解区写出来的代码:package code;import java.util.ArrayList;import java.util.Arrays;import java.util.List;class solution { public List<List<Integer>> threeSum(int[] nums) { //数组为空,或者长度小于3.原创 2020-07-12 21:40:01 · 108 阅读 · 0 评论 -
LeetCode 日记 1.两数之和
题目来源:https://leetcode-cn.com/problems/two-sum/由于哈希查找的时间复杂度为 O(1),所以可以利用哈希容器 map 降低时间复杂度 遍历数组 nums,i为当前下标,每个值都判断map中是否存在 target-nums[i] 的 key 值 如果存在则找到了两个值,如果不存在则将当前的(nums[i],i) 存入 map 中,继续遍历直到找到为止 如果最终都没有结果则抛出异常 时间复杂度:O(n)class Solution { public.原创 2020-07-08 11:52:58 · 125 阅读 · 0 评论 -
LeetCode日记 面试题16.11跳水板
题目来源:https://leetcode-cn.com/problems/diving-board-lcci/比较简单,就懒得说思路了,用数学class Solution { public int[] divingBoard(int shorter, int longer, int k) { if(k<=0){ return new int [0]; } if(shorter==longer){原创 2020-07-08 10:51:27 · 151 阅读 · 0 评论 -
LeetCode日记 33.搜索排序旋转数组
题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], tar原创 2020-06-30 18:04:07 · 108 阅读 · 0 评论 -
LeetCode 面试题35 复杂链表的复制
https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/solution/fu-za-lian-biao-de-fu-zhi-jian-dan-yi-dong-de-san-/思路参考了题解/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) {原创 2020-05-29 20:14:09 · 144 阅读 · 0 评论 -
LeetCode 86.分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-list著作权归领扣网络所有。商业转载请联系官方授权,非原创 2020-05-24 17:54:10 · 108 阅读 · 0 评论 -
LeetCode 53.最大子序和
https://leetcode-cn.com/problems/maximum-subarray/1.动态规划class Solution { public int maxSubArray(int[] nums) { if(nums == null || nums.length ==0){ return 0; } //dp[i]表示以nums[i]结尾的最大子序和 .原创 2020-05-20 17:32:28 · 123 阅读 · 0 评论 -
LeetCode 129.求根结点到叶结点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13 = 2原创 2020-05-18 21:12:23 · 213 阅读 · 0 评论 -
LeetCode 155.最小栈
https://leetcode-cn.com/problems/min-stack/1.使用辅助栈class MinStack { Stack<Integer> stack,minStack; /** initialize your data structure here. */ public MinStack() { this.stack = new Stack<>(); this.minStack = new S.原创 2020-05-18 19:54:17 · 98 阅读 · 0 评论 -
LeetCode 25. k个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实原创 2020-05-16 21:58:45 · 122 阅读 · 0 评论 -
LeetCode 98.验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为原创 2020-05-16 17:30:47 · 104 阅读 · 0 评论