
LeetCode刷题
文章平均质量分 77
RuiW_97
测试小白进阶ing
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【LeetCode刷题】旋转数组问题
数组有序时常用二分法来查找,时间复杂度降到O(logn)。旋转的有序数组也可以使用二分法,通过讨论mid所指元素在数组中的位置来重新确定搜索范围。153,寻找旋转排序数组中的最小值,medium假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。请找出其中最小的元素。示例 1:输入:nums = [3,4,5,1,2]输出:1示例 2:输入:nums = [4,5,6,7,0,1,2]输出:0示原创 2021-06-25 15:41:21 · 469 阅读 · 1 评论 -
【LeetCode刷题】重叠区间问题
跟着甜姨整理了这一类问题,没有固定套路,但需要找规律以及细心。重叠区间252,会议室,easy题解实质是判断有没有重叠区间,将区间按照会议开始时间排序,然后遍历一遍即可。代码class Solution{ public boolean canAttendMeetings(int[][] intervals){ Arrays.sort(intervals, (v1, v2)->v1[0]-v2[0]); for(int i = 1; i < i原创 2021-06-24 15:02:58 · 1416 阅读 · 1 评论 -
旋转数组(0°-360°)
6.6的LeetCode周赛第一题为旋转数组,与48题有些类似。顺时针旋转90°顺时针转90°,可以通过一行来找规律。90度旋转后行转为列,第 i 行变为 第 n - 1 - i 列,则mat[i][j] ——> mat[j][n-1-i]顺时针旋转180°旋转180°后,第 i 行转到了 第 n - 1 - i 行,同时对应的列也发生了变化,第 j 列转到了 第 n - 1 - j 列。则mat[i][j] ——> mat[n-1-i][n-1-j]顺时针旋转360°旋转3原创 2021-06-06 16:56:39 · 170 阅读 · 0 评论 -
二叉树的镜像—输入输出处理
剑指 Offer 27. 二叉树的镜像比较简单,可以采用递归也可以借助栈操作。思路在处理输入时,建立一个TreeNode类,并生成树,镜像之后比较层序遍历结果。代码class TreeNode{ TreeNode left; TreeNode right; int val; public TreeNode(int val){this.val = val;}}public class Main0528 { public static TreeNode mirr原创 2021-05-28 12:55:44 · 239 阅读 · 0 评论 -
解锁一道会员题!【LeetCode1245】
先由一道easy题入手 LeetCode 543二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。对于每个节点,直径即其左子树和右子树的深度的和,而对整个树,这些节点的直径中的最大值即是树的直径。方法:采用dfs,建立辅助函数,函数返回值为以当前root节点为根节点的树的深度。class Solution { int ans = 0; public int diameterOfBinaryTree(TreeNode root) {原创 2021-05-13 21:10:16 · 383 阅读 · 2 评论 -
LeetCode刷题—实现计算器
首先实现加减乘除运算的计算器。题目:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = "3+2*2" 输出:7题目要求:输入一个字符串,可以包含+ - * / 、数字、空格,你的算法返回运算结果。符合运算法则,先乘除后加减。除号是整数除法,5/2=2,-5/2=-2。因为有运算顺序,想到用栈实现。对于第一条,遍历整个字符串,可以判断当前字符是否是数字或运算符。思路:建立两个变量,一个char变量,记录每个数字原创 2021-04-05 21:07:32 · 655 阅读 · 0 评论 -
LeetCode刷题—股票交易问题
再做一次股票交易问题,又发现满满的套路,跟我一起重刷一遍吧!思路清晰!一口气狂撸6道题!题目汇总:贪心121,最多进行一次买卖122,可以多次买卖二维DP122,可以多次买卖309,多次买卖+卖出冷冻期714,多次买卖+卖出手续费三维DP123,最多两次买卖188,最多 k 次买卖注意卖出必须在买入之后!【贪心】121,买卖股票的最佳时机,easy给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股原创 2021-03-11 11:37:15 · 635 阅读 · 1 评论 -
LeetCode刷题—使用计数数组
此类题一般有一个元素值为1~n 的数组,要求找到重复或缺失的数字。448,找到所有数组中消失的数字,easy给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]题解题意:数组元素值为原创 2021-03-10 10:15:17 · 334 阅读 · 0 评论 -
LeetCode刷题 —回文
回文即 正序(从左向右)和倒序(从右向左)读都是一样的。常见的有整数、链表、字符串相关问题。先由整数问题引入。回文数7,整数反转,easy给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321题解此题需要注意的是x的范围,原创 2021-03-09 14:49:22 · 802 阅读 · 0 评论 -
LeetCode刷题——LRU缓存机制
146,LRU缓存机制,medium运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:• LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存• int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。• void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键原创 2021-02-27 11:27:29 · 193 阅读 · 0 评论 -
LeetCode刷题—双指针解数组排序
前言双指针分为快慢指针(向一个方向遍历)和左右指针(从两个方向相对遍历), 在进行数组排序时常用到第一种。指针 j 用于探路,找到目标元素与指针 i 所指元素交换,并将 i 向前一步,继续。模板public int[] sortArrayByParity(int[] A) { int i = 0; int n = A.length; //j 指针探路 for(int j = 0; j < n; j++){ if(原创 2021-02-17 11:35:07 · 346 阅读 · 0 评论 -
LeetCode刷题—岛屿问题
思路一个二维矩阵从某个点开始向四周扩展,直到无法再扩展为止。矩阵,可以抽象为一幅「图」,这就是⼀个图的遍历问题,也就类似⼀个 N 叉树遍历的问题。几行代码就能解决,直接上框架吧:// (x, y) 为坐标位置 void fill(int x, int y) { fill(x - 1, y); // 上 fill(x + 1, y); // 下 fill(x, y - 1); // 左 fill(x, y + 1); // 右 }这个框架可以解决所有在二维矩阵中遍历的问题,说得原创 2021-02-16 17:50:41 · 924 阅读 · 0 评论 -
LeetCode刷题——回溯算法
回溯算法前言「回溯是递归的副产品,只要有递归就会有回溯」,所以回溯法也经常和二叉树遍历,深度优先遍历(dfsdfsdfs)混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,优化回溯算法只有**「剪枝」**一种方法。回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等解决一个回溯问题,实际上就是原创 2021-02-15 16:13:08 · 517 阅读 · 0 评论 -
LeetCode刷题—贪心算法
概述贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。什么是贪心选择性质呢,简单说就是:每一步都做出一个局部最优的选择,最终的结果就是全局最优。注意哦,这是一种特殊性质,其实只有一部分问题拥有这个性质。比如你面前放着 100 张人民币,你只能拿十张,怎么才能拿最多的面额?显然每次选择剩下钞票中面值最大的一张,最后你的选择一定是最优的。区间调度问题先解决一个基础问题:给你很多形如 [start, end] 的闭区间,请你设原创 2021-01-31 21:14:20 · 272 阅读 · 0 评论 -
LeetCode刷题—数组:双指针
数组题目中有两种双指针的应用:左右指针和快慢指针。目录如下:双指针(左右)双指针(快慢)相关题目有:167,两数之和Ⅱ344,反转字符串26,删除排序数组中的重复项27,移除元素283,移动零485,最大连续1的个数540,有序数组中的单一元素209,长度最小的子数组双指针(左右)左右指针在数组中实际是指两个索引值,一般初始化为left = 0, right = nums.length - 1。循环条件为 while(left < right) 。在上篇文章二分查找中,凸原创 2021-01-19 17:16:50 · 208 阅读 · 0 评论 -
LeetCode刷题—数组:二分法
二分查找目录如下:1. 二分查找基本框架2. 二分查找左边界3. 二分查找右边界相关题目:704,二分查找34,在排序数组中查找元素的第一个和最后一个位置278,第一个错误的版本875,爱吃香蕉的可可1011,在D天内送达包裹的能力69,x的平方根744,寻找比目标字母大的最小字母153,寻找旋转排序数组中的最小值引入常用的二分查找场景:寻找一个数、寻找重复数的左侧边界、寻找重复数的右侧边界。二分查找框架int binarySearch(int[] nums, int ta原创 2021-01-19 17:12:27 · 492 阅读 · 0 评论 -
LeetCode刷题—动态规划(六)
终于到动态规划的最后一部分啦,完结撒花~这一篇总结【股票交易问题】,参考的是labuladong的文章相关问题有:121,买卖股票的最佳时机122,买卖股票的最佳时机Ⅱ309,最佳买卖股票时机含冷冻期714,最佳买卖股票时机含手续费123,买卖股票的最佳时机Ⅲ188,买卖股票的最佳时机Ⅲ一、做题思路对股票,每天有三种选择:买入、卖出、保持不变。注意卖出必须在买入之后,买入必须在卖出之后,保持不变分为两种状态:一种是买入之后的持有股票,一种是卖出之后的不持有股票。子问题dp[i][原创 2021-01-12 22:26:38 · 120 阅读 · 0 评论 -
LeetCode刷题—动态规划(五)
完全背包引入322,零钱兑换,medium518,零钱兑换Ⅱ,medium377,组合总和Ⅳ,medium139,单词拆分,medium原创 2021-01-08 11:53:19 · 393 阅读 · 0 评论 -
LeetCode刷题—动态规划(四)
刷了几道背包问题,用了一周时间,动态规划的难真的领会到了。虽然一变就不会,还是想总结一下,加深理解。目录0-1背包引入416,分割等和子集,medium494,目标和,medium474,一和零,medium总结0-1背包引入一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。怎么装使这个背包装下物品的价值最大?套路:子问题:二维 dp 数组 dp[i][j]dp[i][j]dp[i][j]—对于前 i 个物品,当前背包容量为 j,这种情况下可以装的最大价值是 dp原创 2021-01-07 17:54:47 · 307 阅读 · 0 评论 -
LeetCode刷题—动态规划(三)
最长公共子序列问题,最基本的问题是在两个字符串中找出最长公共字符串。方法是使用双指针 i,j遍历两个字符串,建立二维 dp 数组,通过填表获得结果。1143,最长公共子序列,medium583,两个字符串的删除操作,medium712,两个字符串的最小ASCII删除和,medium1143,最长公共子序列,medium给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某原创 2021-01-02 22:02:31 · 210 阅读 · 0 评论 -
LeetCode刷题—动态规划(二)
刷了一系列这类的题,真的感受到dp 深深的套路,那就看看 什么套路来解此类题吧!300,最长递增子序列,medium673,最长递增子序列的个数,medium435,无重叠区间,medium646,最长数对链,medium452,用最少数量的箭引爆气球,medium最长递增子序列最长递增子序列(Longest Increasing Subsequence,简写 LIS)是比较经典的一个问题,比较容易想到的是动态规划解法,时间复杂度 O(N^2)。注意「子序列」和「子串」这两个名词的区别,子串一原创 2020-12-29 20:43:31 · 168 阅读 · 0 评论 -
LeetCode刷题—动态规划(一)
跟着 labuladong 和 CS-Notes 对动态规划做题、总结,形成自己的模板。引入动态规划动态规划问题的一般形式就是求最值。求解动态规划的核心问题是穷举。首先,动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。而且,动态规划问题一定会具备「最优子结构」,才能通过子问题的最值得到原问题的最值。另外,虽然动态规划的核心思想就是穷举求最值,但是问题可以千变万化,穷举所有可行解其实并原创 2020-12-23 13:21:14 · 366 阅读 · 0 评论 -
LeetCode刷题—根据两种遍历方式重建二叉树
LeetCode中有三道很类似的题,思路也大同小异,故作一总结。105,从前序与中序遍历序列构造二叉树,medium106,根据中序和后序遍历构造二叉树,medium889,根据前序和后序遍历构造二叉树,medium这三道题都是给出两种遍历方式,由其遍历顺序可发现规律来重建此二叉树。下面详解105题,后两题思路稍作改变,比较好懂了。105,从前序与中序遍历序列构造二叉树,medium根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preo原创 2020-12-21 14:40:30 · 290 阅读 · 0 评论 -
LeetCode刷题—树的遍历(前中后序、层次)
此篇用于梳理二叉树的遍历方式:深度优先遍历(前、中、后序遍历)和广度优先遍历,不仅能快速领会思想和总结规律,还可以顺便刷下这些题:144,二叉树的前序遍历,medium145,二叉树的后序遍历,medium94,二叉树的中序遍历,medium102,二叉树的层序遍历,easy230,二叉搜索树中第k小的元素,medium501,二叉搜索树中的众数,easy530,二叉树搜索树的最小绝对差,easy一、二叉树的遍历有四种方式:1. 前序遍历:根-左-右2. 中序遍历:左-根-右3. 后序原创 2020-12-20 22:48:56 · 413 阅读 · 0 评论 -
LeetCode刷题—树的最近公共祖先
针对下面两题作出解答与总结:235,二叉搜索树的最近公共祖先,easy236,二叉树的最近公共祖先,medium前序最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”p、q两节点一定在此树上,有两种情况:p、q 在一个节点两侧,此节点即为p、q的公共祖先,如下图中 2 为p = 7、q = 4 的最近公共祖先p 或 q为最近公共祖先,如下图中 p 即为最近公共祖先原创 2020-12-17 16:30:21 · 140 阅读 · 0 评论 -
LeetCode刷题—二叉搜索树的套路
本文针对BST 的基础操作:判断 BST 的合法性(98)、增(701)、删(450)、查(700)。以几道题来总结出套路模板,以一敌十!98,验证二叉搜索树,medium700,二叉搜索树中的搜索,easy701,二叉搜索树中的插入操作,medium450,删除二叉搜索树中的节点,medium98,验证二叉搜索树,medium给定一个二叉树,判断其是否是一个有效的二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5原创 2020-12-16 19:24:39 · 301 阅读 · 0 评论 -
LeetCode刷题——树(递归)
对于树,经常用的算法有递归,回溯,BFS,DFS等。下面是一些用递归算法来解的题:104,二叉树的最大深度,easy110,平衡二叉树,easy543,二叉树的直径,easy226,翻转二叉树,easy617,合并二叉树,easy112,路径总和,easy113,路径总和Ⅱ,midium572,另一个树的子树,easy101,对称二叉树,easy111,二叉树的最小深度,easy404,左叶子之和,easy687,最长同值路径,medium671,二叉树中第二小的节点,easy1原创 2020-12-14 16:21:37 · 680 阅读 · 0 评论 -
Leetcode刷题——链表类
Leetcode刷题——链表类整理不易,希望对你有所帮助和启发,路过点个赞或者评论一下吧~160,相交链表,easy206,反转链表,easy21,合并两个有序链表,easy83,删除排序链表中的重复元素,easy83-Ⅱ.删除排序链表中的重复元素,middle19,删除链表的倒数第N个节点,middle24,两两交换链表中的节点,middle445,两数相加Ⅱ,middle234,回文链表,easy725,分隔链表,middle328,奇偶链表,middle160,相交链表,ea原创 2020-12-08 17:10:46 · 618 阅读 · 0 评论