
LeetCode探索
在力扣上刷题的总结
史上最弱万古流芳
这个作者很懒,什么都没留下…
展开
-
LeetCode探索(深度优先遍历和广度优先遍历)
扫雷游戏题目:https://leetcode-cn.com/problems/minesweeper/题目大意:就是扫雷游戏,实在是太长了,还是自己看吧。分析:题目比较长,读懂题目意思之后思路不难。这道题目个人感觉用BFS会简单一些,结果自己写的超时了。看了一下官方解法,感觉这种走格子的题目还是有很多小技巧的。如何遍历周围的格子之前我每次使用BFS或者DFS的时候,都是写4个if,但是像这道题要写8个if,如果每次能走两圈那不是要写15if?太多了,而且很容易出错,这里可以使用两个数组把需原创 2020-08-20 11:05:39 · 482 阅读 · 0 评论 -
LeetCode探索(子串和回文子串)
最长公共子串在说回文子串之前,先来说说最长公共子序列。公共子序列的题目的状态转移方程为:dp[i][j] = dp[i-1][j-1] +1 (s1[i] == s2[j])dp[i][j] = 0 (s1[i] != s2[j])LeetCode718就是一道最长公共子串的题目。题目地址:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/class Solution { public int fi原创 2020-08-19 12:02:46 · 162 阅读 · 0 评论 -
LeetCode探索(并查集)
并查集并查集的核心模板是一个数据结构,包含一个数组root[],表示每个节点的父亲节点,以及两个方法find()和union用于查找和合并。public class DSU{ int[] root; public DSU(int n){ root = new int[n]; for(int i=0;i<n;i++) root[i] = i; } public int find(int x){ if(root[x原创 2020-08-09 14:17:23 · 410 阅读 · 1 评论 -
LeetCode每日一题(不同的二叉搜索树)
不同的二叉搜索树题目地址:https://leetcode-cn.com/problems/unique-binary-search-trees/题目大意:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?分析:一般看到求有多少种而不要求列出所有排列的题目,我们都会自然的想到使用动态规划。不过这道题的动态规划还是有一点难度的,想到了之后会觉得非常简单,但是没有想到的话就感觉无从下手。对于一颗二叉搜索树 而言,最重要的就是根节点,根据根节点的不同,我们可以把这颗二叉搜索树分为左子原创 2020-07-21 09:56:31 · 216 阅读 · 0 评论 -
LeetCode每日一题(题32)
题目题目:https://leetcode-cn.com/problems/longest-valid-parentheses/题目大意:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。分析:这道题目比较有意思,虽然标注的是困难的题目,但是代码并不长,虽然我第一时间也没做出来 。一般地可以采用动态规划,或者单调栈两种方式来做,主要还是因为看到最长子串的题目总是会想到动态规划,看到括号的题目就容易想到栈,所以就按照这两种方式来做吧。动态规划前天我们写了有关于动态规原创 2020-07-04 10:47:40 · 184 阅读 · 0 评论 -
LeetCode探索(动态规划)
动态规划动态规划的实质其实就是穷举,通过DP表的形式折叠一些重复的计算。dp其实没有什么好的模板,重点在于写出状态转移方程。但是即使写出了状态转移方程还是有很多细节需要注意。总的来说DP的模板可以归结成如下://初始化dp[0][0] = base;//进行状态转移for(状态1 in 状态1所有的取值) for(状态2 in 状态2所有的取值) dp[状态1][状态2] = 状态转移方程不过这也太笼统了吧,还是来看几道经典的DP吧。最长回文子串题目:https://leetcod原创 2020-07-02 16:59:21 · 184 阅读 · 0 评论 -
LeetCode每日一题(题378,题718)
有序矩阵中第K小的元素题目大意:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。分析:这道题我一开始以为是搜索题,然后想了一会并没有想出来,最后采用了转换为1维数组排序的方式。其实这道题的方法还是挺巧妙的,每次二分出一个数,判断小于等于这个数的元素是否为k个,如果是就向右移动,如果不是则向左移动。接下来问题就转换为了如何查找这个矩阵中存在多少个小于等于这个数的元素,这个问题就和我们之前在剑指of原创 2020-07-02 13:36:39 · 148 阅读 · 0 评论 -
LeetCode每日一题(题215,快速排序)
模板快速排序作为一个经典的排序算法有着高效稳定的优势,快速排序的思路也非常简单。首先我们选取一个数作为基数,然后把所有比这个数小的数字放在左边,大的放在右边,然后再以这个数字为分割线,对左右两边的数组继续排序。 由此我们可以写出快速排序的经典模式(升序):public void quickSort(int[] nums,int start,int end){if(start >= end)return;int mid = partition(nums,start,end);quickSor原创 2020-06-29 10:58:50 · 4181 阅读 · 1 评论 -
LeetCode每日一题(题47)
缺失的第一个整数题目:https://leetcode-cn.com/problems/first-missing-positive/题目大意:给出一个未排序的数组,找出其中没有出现过的最小整数。分析:这道题代码不长,但是却标记的困难足以看出这是一道注重方法和思路的题目。对于长度为N的数组,假设从1开始每个正整数都出现过,那么最小未出现的正整数是N+1。那么对于这种数组,我们可以将每个元素放到对应下标+1的位置上。假设1没有出现在这个数组中,那么数组第一个元素nums[0]一定不是1,那么我们就原创 2020-06-27 13:50:15 · 197 阅读 · 0 评论 -
LeetCode每日一题(题139)
单词拆分题目:https://leetcode-cn.com/problems/word-break/题目大意:给出一个字符串s和一个字符串数组words,判断s是否能够拆分成多个words中的字符串。分析:这道题比较简单的方式应该是采用动态规划来做。对于任意一个字符串中的区间,可以判断该区间组成的字符串是否在字典中,如果是,则这个区间的真假取决于前面那个区间的真假。给出状态转移方程dp[i] |= dp[j]&check(substring(j,i)) j>=0&&原创 2020-06-25 20:27:26 · 258 阅读 · 0 评论 -
LeetCode每日一题(题124)
题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。二叉树中的最大路径和分析当我看到这道题的时候,我的第一反应使用BFS,每次记录当前节点的当前最大路径和,然后定义同一个全局变量来保存出现过的最大路径和。也就是最大子序列和+树的层次遍历。那于是说干就干,写如下代码:/** * Definition for a binary tree node. * public class TreeNode原创 2020-06-21 15:05:03 · 530 阅读 · 0 评论 -
LeetCode每日一题(题1028)
前言最近在刷LeetCode每日一题,每次做完之后总能有些收获,所以想着不如每天写个博客记录一下做的题目的解法以及自己写的时候问题出在哪里。题目从先序遍历还原二叉树题目大意:给出一个字符串"1-2–3--4-5–6--7",1代表节点的值,前面的’-'个数代表节点的深度。如果只有一个子节点,保证这个节点为左子节点。返回一个二叉树。思路一看到树的题目,首先就想到了使用递归。这道题显然是不断递归生成子节点,那首先需要把一些值设置为全局变量。需要设置为全局变量的值有index :当前字符位原创 2020-06-18 11:11:53 · 199 阅读 · 0 评论 -
LeetCode探索(滑动窗口)
模板滑动窗口一般用在字符串匹配、寻找子序列和等题目中。其实滑动窗口就是双指针的特殊场景。我们来回忆一下滑动窗口的题目一般是如何应用的。我们需要先移动右指针,然后看是否需要进行收缩窗口。如果需要的话则不断移动左指针然后进行收缩,直至不满足收缩条件。int left=0,right=0;while(right < s.size()){ windows.add(s[right]) right++; while(window needs shrink){ window.remove(s[原创 2020-06-28 14:21:17 · 181 阅读 · 0 评论 -
LeetCode探索(回溯、归并)
回溯、归并前言回溯框架全排列二叉树中和为某一值的路径电话号码的字母组合归并框架合并k个排序链表前言探索卡片终于做到了回溯的部分,我一直对回溯算法不太了解,所以借此机会总结一下回溯算法的具体写法和框架。本文参考LeetCode用户labuladong的文章:回溯算法解题套路框架后半部分顺便总结之前使用的归并排序。回溯框架一个回溯问题,主要要考虑清楚三个部分:路径选择列表结束条件基于这三个部分,可以给出算法框架。List<> res;public void backtr原创 2020-06-27 16:42:00 · 453 阅读 · 0 评论 -
LeetCode探索(搜索树、右视图)
验证二叉搜索树题目:https://leetcode-cn.com/problems/validate-binary-search-tree/题目大意:给定一个棵二叉树,判断其是否是二叉搜索树。分析:一开始做的时候,出了点差错,想用递归判断当前节点是否符合二叉搜索树定义的时候,只判断了当前节点的左子树小于当前节点的值,当前节点右子树的值大于当前节点。但是这样其实是不满足二叉搜索树的比当前节点小的节点都在左边,当前节点大的节点都在右边这个定义的。比如二叉树[2,1,3,null,4],对于任何单个原创 2020-06-25 20:05:21 · 153 阅读 · 0 评论 -
LeetCode探索(堆和贪心)
会议室2题目地址:https://leetcode-cn.com/problems/meeting-rooms-ii/题目大意:给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。示例 1:输入: [[0, 30],[5, 10],[15, 20]]输出: 2示例 2:输入: [[7,10],[2,4]]输出原创 2020-06-24 13:50:20 · 199 阅读 · 0 评论 -
LeetCode探索(字符大小写)
最常见的单词题目:最常见的单词给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入:paragraph = “Bob hit a ball, the hit BALL flew far after it was hit.”banned = [“hit”]输出: “bal原创 2020-06-22 11:28:04 · 302 阅读 · 0 评论 -
LeetCode探索(大数相加和验证回文字符和LRU缓存机制)
大数相加和验证回文字符和LRU缓存机制前言大数相加字符数组的返回值多余的字符串怎么处理正确代码验证回文字符串(其二)LRU缓存机制后记前言昨天刷题刷的有一些些累,所以周末决定休息一下,总结一下之前做过的一些题目,顺便复习一下知识点。今天这篇主要总结一下做大数相加这道题时候出现的错误以及复习一下之前遇到过的一些比较有意思的题目。大数相加题目非常简单,就是给你两个非常大的数字,让你返回这两个数字相加之后的和。一般来说这种题目我们都是从两个字符串的最后一位开始加起,判断一下是否需要进位,需要的话就把结原创 2020-06-20 15:11:39 · 357 阅读 · 1 评论 -
LeetCode探索(01背包和贪心算法)
01背包和贪心算法前言合并区间最后一块石头的重量前言昨天在做力扣探索的时候遇到了两道数组题,看到题目的时候就感觉不知道如何下手。苦思冥想一番,最后去偷看了答案,发现是贪心算法和01背包。因为之前听说面试中很少出贪心和背包问题的题目,所以本来打算直接跳过,但是后来一看代码,不长,那还是了解一下吧。合并区间题目地址:合并区间题目大意:给出一个区间的集合,合并所有区间。这道题我一开始想了很久,想用单调栈来实现,当一个数进入的时候,弹出所有小于等于这个数的栈元素。但是遇到了一个问题,当栈中元素为[原创 2020-06-19 19:12:35 · 956 阅读 · 0 评论 -
LeetCode探索(二分查找)
二分查找前言二分查找有几种写法基本框架寻找一个数出现的位置左侧边界右侧边界题34总结返回值java源码中的二分为什么要使用左闭右开的区间中位数的选择和缩进后记前言今天在力扣上的探索卡片中遇到了一个二分查找的题。在排序数组中查找元素的第一个和最后一个位置题目大意如下:给定一个具有重复数字的排序数组和一个数target,在该数组中查找target是否存在于数组中,如果存在则返回第一次出现的位置和最后一次出现的位置,否则返回[-1,-1]。对于这道题,第一反应就是用二分查找寻找左边界和右边界。但是思路原创 2020-06-18 15:59:16 · 556 阅读 · 0 评论