![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
leetcode 刷题
yours_棒棒糖
间歇性踌躇满志,持续性混吃等死!!!难搞喔!!
生活不易,继续前行,为了成为最好的自己!
刷题记录,博客:https://github.com/can19960229/Candy_leetcode
展开
-
LeetCode - 按标签分类刷题(二叉搜索树题解)
LeetBook- 二叉搜索树对LeetBool 二叉搜索树的自我总结以上是LeetCode的二叉搜索树的分类题目,总结起来就是利用二叉搜索树的中序遍历是升序的进行各种变式,其中:二叉搜索树的查找,插入,删除操作(重点关注)搜索操作 是进行循环判断,如果大于根节点,则看右节点;如果小于根节点则看左节点插入操作,以要插入的节点的值大小来决定插入到哪个子树中如果该子树不为空,则问题转化成了将 val 插入到对应子树上。(递归)否则,在此处新建一个以 val 为值的节点,并链接到其父节点 r原创 2021-07-02 22:53:57 · 159 阅读 · 1 评论 -
LeetCode - 按标签分类刷题(二叉树题解)
LeetBook - 二叉树对LeetBool 二叉树的自我总结以上是LeetCode的二叉树的分类题目,我花一天时间过了一遍,其中路径总和、二叉树的最大深度、对称二叉树——使用递归的方法进行树的遍历二叉树的序列化与反序列化 ——没有掌握,但是看到代码能理解,需要反复复习从中序从中序与后序遍历序列构造二叉树 、从前序与中序遍历序列构造二叉树——使用递归方式容易理解些,但是需要注意左右子树的边界界定...原创 2021-06-27 13:58:32 · 94 阅读 · 0 评论 -
LeetCode - 按标签分类刷题(链表题解)
19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.双指针:class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head == null){原创 2020-12-29 22:12:17 · 249 阅读 · 0 评论 -
LeetCode - 按标签分类刷题(双指针题解)
3. 无重复字符的最长子串 public int lengthOfLongestSubstring(String s) { int left = 0, right = 0, max = 0; Set<Character> set = new HashSet<>(); while (right < s.length()) { if (set.contains(s.charAt(right))) {原创 2020-11-30 11:38:12 · 231 阅读 · 0 评论 -
极客时间_算法训练营(代码实现汇总)
对极客大学算法训练营的题目做一个分类,方便后续查看。第01课丨数据结构与算法总览数据结构脑图文档:链接:数据结构脑图 和 算法脑图.note算法脑图自己画的脑图:(感觉有些凌乱,之后会逐步进行补充,完善,整理)链接:数据结构和算法脑图.note其中的一些分支,之前有画一些小型分类的脑图:数据结构基础脑图:数据结构基础脑图.note树 的 脑图:树的脑图.note排序算法脑图:排序算法脑图.note第02课丨训练准备和复杂度分析•如何理解算法时间复杂度的表示法第03课丨数原创 2020-10-23 10:58:35 · 4652 阅读 · 10 评论 -
数组按频次排序
链接原创 2021-09-13 18:50:42 · 479 阅读 · 0 评论 -
字符串的组合问题——返回字符串的所有不重复子序列
题目你有一套字母卡片tiles,卡片上印有一个大写字母,这套卡片里可能有重复的字母。返回这套卡片可能排列的非空字母序列的数目。注意每张卡片只能用一次。提示:1 <= tiles.length <= 7tiles 由大写英文字母组成输入描述:共一行,一个字符串输出描述:共一行,一个整形数字,表示结果。示例:输入:AAB输出:8解释:存在8个满足题意的组合:A 、AA、AB、AAB、ABA、B、BA、BAA题解import java.util.*;public cl原创 2021-09-11 22:01:47 · 1199 阅读 · 0 评论 -
链表的头插法和尾插法——头插尾插交替插入
private static ListNode dummy = new ListNode(0); //头插法 public static void headInsert(ListNode node){ if (dummy.next == null){ dummy.next = node; return; } ListNode temp = dummy.next; dummy.nex..原创 2021-09-06 23:47:44 · 761 阅读 · 0 评论 -
找出数组中重复元素最多的数
题目描述:如何找出数组中重复元素最多的数思路:使用Map映射表记录每一个元素出现的次数,然后判断次数大小,进而找出重复次数最多的元素。key表示数组的元素,value表示这个元素在数组中出现的次数。最后对map进行遍历。/** * 使用map(不允许重复的),key是a中元素的值,value是元素出现的次数 * @param a * @return */ private int findMostFrequentInArray(int[] a) { Map<Integer原创 2021-08-26 09:46:02 · 2268 阅读 · 0 评论 -
判断一个0~n个数中,出现不重复位的数的个数
输入一个n,然后是数组 1~n,n个数中数字不相同的数的个数例如,输入 11,则就判断 1 2 3 4 5 6 7 8 9 10 11,输出 10因为【 1 2 3 4 5 6 7 8 9 10 这些数字每一位都不相同,但是11 有两个1 ,则不count】——输出10public class test_3 { public static int test(String n){ int count = 0; int num = Integer.原创 2021-08-25 23:35:05 · 383 阅读 · 0 评论 -
通过数组创建单链表——链表删除重复的元素
链表删除重复的元素参考链接:https://blog.csdn.net/feinifi/article/details/94460480控制台输入一组数组,将数组转换成链表,构建链表,将链表中重复的元素删除(1)将当前节点的上一个节点的next指向当前节点的nextpublic LinkNode removeElements(LinkNode head,int val){ //如果头结点是要删除的节点,那么直接跳出循环 //如果头结点是要删除的节点,直接head =原创 2021-08-24 21:07:56 · 516 阅读 · 0 评论 -
输入一个数组构建一颗二叉树,并且找出二叉树两个节点的最近公共祖先
package org.example;/** * Copyright (C), 2019-2021 * author candy_chen * date 2021/8/8 19:05 * * @Classname test * Description: 测试 */import org.junit.Test;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.u原创 2021-08-10 23:33:02 · 298 阅读 · 0 评论 -
手撕LRU——字节常考
package Test03;import java.util.HashMap;/** * @description: LRU缓存结构 * @author: Dream * @date: 2021-07-30 15:03 **/public class LRUCache { private static HashMap<Integer,Node> cache=new HashMap<>(); private int size; private原创 2021-08-07 18:06:59 · 137 阅读 · 0 评论 -
LeetCode——链表重复元素问题、重排链表
重排链表对一个链表,先找到后半部门的链表将其反转,然后将后半部分插入到前前半部分中,隔一个插入一个。输入: head = [1,2,3,4]输出: [1,4,2,3]输入: head = [1,2,3,4,5]输出: [1,5,2,4,3](1)用双指针找到链表的中点(2)将后半部门利用链表反转,进行反转(3)然后将两个链表交替进行插入两个链表进行交替插入public void merger(ListNode l1,ListNode l2){ ListNode l1_temp;原创 2021-08-06 23:14:48 · 590 阅读 · 1 评论 -
一个带空节点的数组构建二叉树
有一个带空节点的数组,用该数组构建一个二叉树import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/** * */public class MyBinaryTree { /** * 二叉树节点 */ private static class TreeNode{ int data;原创 2021-08-04 22:48:00 · 423 阅读 · 0 评论 -
LeetCode - 合并两个有序数组,并去除重复元素
/** * 合并两个有序数组并去重 * 思路是双指针 * 百度面试题 */public int[] merge(int[] nums1, int[] nums2) { List<Integer> list = new ArrayList<>(); int p1 = 0, p2 = 0; int n1 = nums1.length; int n2 = nums2.length; while (p1 < n1 &&原创 2021-08-02 11:42:58 · 934 阅读 · 0 评论 -
链表的归并排序、链表的快速排序、链表的插入排序
链表的归并排序public class 链表的归并排序 { class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } public ListNode mergerSort(ListNode head){ if (head == null ||原创 2021-07-30 13:54:25 · 82 阅读 · 0 评论 -
LeetCode - 按照频率将数组升序排序(Java)——比较器的用法
题目给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。示例 1:输入:nums = [1,1,2,2,2,3]输出:[3,1,1,2,2,2]解释:‘3’ 频率为 1,‘1’ 频率为 2,‘2’ 频率为 3 。示例 2:输入:nums = [2,3,1,3,2]输出:[1,3,3,2,2]解释:‘2’ 和 ‘3’ 频率都为 2 ,所以它们之间按照数值本身降序排序。示例 3:输入:nums = [-1,原创 2021-07-18 23:06:07 · 474 阅读 · 0 评论 -
LeetCode 136 - 数组中只出现一次的数字 (数组中只出现两次的数字)——异或
数组中只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1使用异或进行判断public int singleNumber(int[] nums) { if(nums.length == 0){ return 0; } int ans = 0;原创 2021-06-24 23:26:55 · 214 阅读 · 0 评论 -
面试题 17.10. 主要元素——数组
面试题 17.10. 主要元素题目描述数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。示例 1:输入:[1,2,5,9,5,9,5,5,5]输出:5示例 2:输入:[3,2]输出:-1示例 3:输入:[2,2,1,1,1,2,2]输出:2解题思路以下涉及好几种方法,推荐使用排序后验证中间元素import java.util.Arrays;import java.util.HashMap;import java.util.Map;原创 2021-03-26 22:05:04 · 122 阅读 · 0 评论 -
面试题 10.01. 合并排序的数组
面试题 10.01. 合并排序的数组题目描述给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]解题思路 public void merge_1(int[] A, int m, int[] B, int n) {原创 2021-03-23 22:12:44 · 79 阅读 · 0 评论 -
面试题 04.03. 特定深度节点链表——DFS
面试题 04.03. 特定深度节点链表——DFS给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2,3],[4,5,7],[8]]class Solution_04_03 { publ原创 2021-01-11 22:09:04 · 110 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵
面试题 01.07. 旋转矩阵给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12原创 2021-01-02 21:26:13 · 93 阅读 · 1 评论 -
面试题 01.05. 一次编辑(动态规划)
面试题 01.05. 一次编辑字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例 1:输入: first = "pale"second = "ple"输出: True示例 2:输入: first = "pales"second = "pal"输出: False方法一:主要思路:只有一个地方需要修改,那么不妨定位到不同字符处。有以下两种情况(1)长度相同:leetcode 与 leetk原创 2020-11-19 22:28:19 · 281 阅读 · 0 评论 -
LeetCode - 46. 全排列——回溯算法
46. 全排列题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解题思路class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = new原创 2021-03-05 21:59:17 · 75 阅读 · 0 评论 -
LeetCode - 9. 回文数
9. 回文数题目描述给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个原创 2021-03-05 21:56:28 · 148 阅读 · 0 评论 -
LeetCode - 7. 整数反转——数学
7. 整数反转题目描述给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0解题思路class Solution { public in原创 2021-03-05 19:31:45 · 100 阅读 · 0 评论 -
LeetCode - 5. 最长回文子串——字符串、动态规划
5. 最长回文子串题目描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”解题思路class Solution_5 { /** * 暴力求解 时间复杂度太高 * @param s * @return原创 2021-03-05 19:26:55 · 106 阅读 · 0 评论 -
【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
4. 寻找两个正序数组的中位数题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输原创 2021-03-04 19:49:26 · 63 阅读 · 1 评论 -
LeetCode - 3. 无重复字符的最长子串——哈希表、双指针、滑动窗口法、字符串
3. 无重复字符的最长子串题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的原创 2021-03-04 19:42:53 · 91 阅读 · 1 评论 -
Leetcode - 2. 两数相加——链表
2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,原创 2021-03-04 19:37:18 · 78 阅读 · 1 评论 -
【坚持刷题】LeetCode - 108 将有序数组转换为二叉搜索树、109 有序链表转换二叉搜索树
108 将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:思路二叉搜索树的中序遍历是升序的,给定数组的元素已经按升序排列,则只需要找到数组中的一个元素最为根原创 2021-05-24 14:01:12 · 122 阅读 · 0 评论 -
LeetCode - 23. 合并K个升序链表
23. 合并K个升序链表题目描述合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入: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原创 2021-05-17 14:28:51 · 123 阅读 · 0 评论 -
LeetCode - 按标签分类刷题(字符串题解)——回文串系列
回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true复制代码示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。复制代码示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。普通解法先将 整数转为字符串 ,然后将字符串分割为数组,只需要循环数组的一半长度进行原创 2021-04-20 13:15:15 · 297 阅读 · 0 评论 -
LeetCode - 581. 最短无序连续子数组——单调栈
581. 最短无序连续子数组题目描述给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 1:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1,2,3,4]输出:0示例 3:输入:nums = [1]输出:0解题思路排原创 2021-03-28 11:18:34 · 174 阅读 · 0 评论 -
LeetCode - 152. 乘积最大子数组——动态规划
152. 乘积最大子数组题目描述给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。解题思路class Solution_152 { /** * 标签:动态规划 * 遍历数组时计算当前最大值原创 2021-03-28 11:12:08 · 97 阅读 · 0 评论 -
LeetCode - 977. 有序数组的平方
977. 有序数组的平方题目描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]解题思路import java.util.Arrays;原创 2021-03-27 21:59:03 · 72 阅读 · 0 评论 -
面试题 10.02. 变位词组——哈希表、字符串
面试题 10.02. 变位词组题目描述编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]解题思路主要是两个部分:1、如何判断变位词?对字符串进行排序,将字符按照azAZ的顺序排列。2、如何归类变原创 2021-03-27 21:57:21 · 89 阅读 · 0 评论 -
LeetCode - 884. 两句话中的不常见单词——哈希表
884. 两句话中的不常见单词题目描述给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。返回所有不常用单词的列表。您可以按任何顺序返回列表。示例 1:输入:A = “this apple is sweet”, B = “this apple is sour”输出:[“sweet”,“sour”]示例 2:输入:A = “apple apple”, B = “b原创 2021-03-27 21:55:41 · 73 阅读 · 0 评论 -
LeetCode - 1748. 唯一元素的和——数组
1748. 唯一元素的和题目描述给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。请你返回 nums 中唯一元素的 和 。示例 1:输入:nums = [1,2,3,2]输出:4解释:唯一元素为 [1,3] ,和为 4 。示例 2:输入:nums = [1,1,1,1,1]输出:0解释:没有唯一元素,和为 0 。示例 3 :输入:nums = [1,2,3,4,5]输出:15解释:唯一元素为 [1,2,3,4,5] ,和为 15 。解题思路imp原创 2021-03-27 21:54:14 · 257 阅读 · 0 评论