![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文章平均质量分 51
unflyBrenda
这个作者很懒,什么都没留下…
展开
-
leetcode 100热题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言标题easy问题合集1.有效括号问题前言提示:leetcode简单题目100题中的easy部分:希望能够坚持下去提示:以下是本篇文章正文内容标题easy问题合集1.有效括号问题https://leetcode-cn.com/problems/valid-parentheses/java方法1class Solution: def isValid(self, s): while.原创 2022-03-31 20:33:17 · 481 阅读 · 0 评论 -
LeetCode 重复的DNA序列(java)
一、题目分析分析:方法1:可以枚举,将长度为10的子串存入hashmap中,这样其实这个题就是个easy的题这个方法感觉太复杂了,我不想看了。大致意思就是,编码之后 ,通过位运算转化的问题了二、java实现方法一:public class Solution { public List<String> ...原创 2019-05-25 21:06:18 · 400 阅读 · 0 评论 -
LeetCoed 无重复字符的最长子串(java)
一、题目分析分析:最长子串,而不是最长子序列。子串是字符串连续的一段,子序列是可以不连续的所以有一种方法叫做滑动窗口法,我记得左程云老师讲过,那个题是计算窗口内最大或者最小值的在本题中,窗口一直向右移动,左边缘也可以向右滑动,右边缘也可以,窗口内的字符是不重复的,每一次加入新的值之后都要记录当前窗口的长度。左右边缘都从begin出发,如果end位置的数已经在窗口中存...原创 2019-05-25 20:29:03 · 7275 阅读 · 2 评论 -
LeetCode 49 同字符词语分组 (java)
一、题目分析和前面的两个题一样,这道题也采用hashmap来做有两种实现的方法,一个是,对数组的每一个字符串元素排序,排序后结果一样的分为一组,也就是说key是排序后的字符串,比如"aet"第二种方法是统计每个字符串中的每个字符出现的个数,分为同一组的字符串每个字符出现的次数是相同的,也就是key应该记录26个字母(小写)每一个字母出现的个数二、java代码第一种方法...原创 2019-05-25 19:35:21 · 437 阅读 · 0 评论 -
LeetCode 290 词语模式 (java)
一、题目分析其实我最先想的是遍历两个字符串,一个记录单个字符出现的个数,一个记录通过空格分开的每个单词出现的个数然后两个数目一一对应,看是否相等虽然是可行的,但是在网上看到更方便的一种做法,就是单个字符作为hashMap的key值,然后单词作为value值所以,就变成了了判断是否一一对应的关系遍历pattern的字符,如果存在于map中,要判断value值是否equals...原创 2019-05-15 15:40:52 · 163 阅读 · 0 评论 -
LeetCode 最长回文串 (409 java)
一、题目分析使用字符串中的字符,任意组合二、java实现class Solution { public int longestPalindrome(String s) { if (s == null) return 0; Map<Character, Integer> map = new HashMap<>...原创 2019-05-15 10:56:38 · 206 阅读 · 0 评论 -
LeetCode 315 逆序对(java)
一、题目分析count[i]表示在nums[i]右侧且比它小的元素个数下面是构造成树的思路yi还有一种方法是归并排序二、代码方法1:搜索二叉树class TreeNode { int val; int size; TreeNode left, right; TreeNode(int val) { ...原创 2019-05-10 12:00:37 · 1327 阅读 · 0 评论 -
LeetCode 499 二叉树的序列化和反序列化 java
一、题目分析:用一定方式记录二叉树成字符串,然后再将字符串解析成二叉树无所谓遍历顺序,先序、中序、后续都可以,甚至按层遍历也是可以的,只要前后规则一致就是可以的然后我是采用左神的方法,节点之间使用_占位符,空指针用#表示,否则不是很难知道左右子树什么时候终止,左神机智一个小例子比如这个,按照先序遍历序列化结果为:0_1_3_#_#_#_2_#_4_#_#...原创 2019-05-09 11:25:54 · 635 阅读 · 0 评论 -
LeetCode 33 旋转数组查找
一、题目分析要求:时间复杂度,数组中没有重复元素,nums是升序,但是可能以未知下标旋转,查找target的位置解决:使用二分法,但是要加上条件限制如果不加改变继续使用二分法,就会出现上述问题 ,怎么加上限制条件呢规律:所以分为下面两种情况,一种是target在mid左边,一种是target在mid右边细分为三种情况...原创 2019-04-13 10:47:49 · 200 阅读 · 0 评论 -
leetcode 34 区间查找
一、题目分析:首先,要求了时间复杂度O(log n),说明暴力禁止我们可以通过二分查找法确定左右区间边界但是不能同时找出左右边界,我们可以先确定左边界,再确定右边界class Solution { public int[] searchRange(int[] nums, int target) { int []result =ne...原创 2019-04-09 15:31:01 · 267 阅读 · 0 评论 -
LeetCode 35 插入位置
一、题目分析给定一个排序数组和一个目标值,如果能够找到这个值,就返回值的坐标,如果找不到,就返回值的插入位置的坐标值二、代码实现(java)class Solution { public int searchInsert(int[] nums, int target) { if(nums.length==0){ return ...原创 2019-04-06 22:09:27 · 118 阅读 · 0 评论 -
LeetCode 199 侧面观察二叉树(java)
一、题目题目分析:侧面观察二叉树,将观察到的节点从上到下依次输出-->也就是层次遍历二叉树,输出每一层的最后一个节点二、java代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...原创 2019-03-24 17:09:35 · 369 阅读 · 0 评论 -
LeetCode 课程安排 207(java)
一、题目注意;输入条件是邻接表,而不是邻接矩阵。假设没有重复边题目分析:题目是说,课程之间有依赖关系,必须完成一门之前,先完成它的依赖课程。所以,如果有环的话,就不可能完成所有的课程。因此题目就是判断,图中是否有环。(1)可以使用深度优先遍历(DFS)思路是,正在进行该节点的递归深度搜索,如果回到了该节点,就说明有环(2)可以使用宽度优先遍历(BFS...原创 2019-04-04 15:09:50 · 594 阅读 · 0 评论 -
LeetCode 76 最小窗口子串(java)
一、题目分析分析:就是在S中找出包括T的所有字符的最小窗口 ,要求时间复杂度是O(N)所以有了之前滑动窗口的概念,这个题会好理解一点值得注意的是数量足够:就是当前窗口中,begin位置的字符出现至少两次,那么为了达到最小,自然就可以想到要把begin向右移动一位来自下面博主的文字:字符串和哈希表的问题。hashmap来存储t字符串中个字母元素...原创 2019-05-25 21:33:42 · 870 阅读 · 0 评论 -
leetcode 198 打家劫舍(java easy 动态规划)
找到规律,推导状态转移方程分析子问题面对第i家房子,如果打劫,那么i-1家就不能进,那么最大财务就是前i-2家累计财富+第i家打劫的财富如果不打劫i家,那么在第i家门口徘徊的时候,身上的最大钱财就是前i-1家非法获得的财富所以就可以得到状态转移方程代码class Solution { public int rob(int[] nums) { ...原创 2019-06-05 09:58:31 · 254 阅读 · 0 评论 -
Leetcode 200 岛屿数量(搜索 java)
如何设计深度优先搜索(DFS)搜索到位置,进行一个标记,按照上下左右搜索,直到某一个点的深度遍历全都搜索完毕,岛屿数量加1小象学院给的是使用一个辅助数组进行标记,其实用原先的一个数组也是可以的,遍历中心位之后,如果中心位是1,count++将中心位置为非1的数字就好了,我看网上有置为0的,我们为了和水域也分开比较,我们将遍历过的土地置为1.我们如何设计宽度优先...原创 2019-06-18 11:17:52 · 923 阅读 · 0 评论 -
leetcode 70 爬楼梯(easy java 动态规划)
一、题目分析爬楼梯的问题先考虑基本情况很快得到f(n)=f(n-1)+f(n-2)第一种情况是最后一次走一层,剩下就是和n-1层有关,第二种情况就是最后一次走两层,剩下就是和n-2层有关不用动态规划也可以,就是记录中间状态,累加代码class Solution { public int climbStairs(int n) { int...原创 2019-06-05 09:15:17 · 145 阅读 · 0 评论 -
leetcode 407 收集雨水(java 搜索)
二维数组存储的是每个单元的高度,求最多接多少体积的雨水首先想到的就是找到最低点 注意看后两个图,当水超过3的时候,可以从绿的的点流进内部所以可以想象内部现在的水的高度可以达到3,减去原来的体积,就是水的体积太机智了吧这个就是想象,想象水流进来的感觉,从内部往外面扩展,找不到什么规律要注意的一点就是,四周的点是没...原创 2019-06-19 15:53:18 · 539 阅读 · 0 评论 -
leetcode 473 火柴棍摆正方形(java 搜索)
就是在N个数里面找出四组数,使得每一组的和都是相等的优化很容易想到,就是先总和除以4取余,不为0说明不能成正方形,因为不能折断然后从大到小排序,每一次判断当前值和平均值的关系大于,就不能拼成正方形,直接false;等于,一条边完成摆放,进行下一条边;小于,记录这个火柴,继续搜,看有没有火柴长度和它加起来能够到达平均值,没有就falseclass Soluti...原创 2019-06-19 10:49:33 · 779 阅读 · 0 评论 -
LeetCode 126 词语接龙2 (搜索 java)
跟上一题127一样,但是额外要求要输出搜索的路径,而且是 所有的路径所以需要考虑将路径转换为有向图,然后将有向图中的最短路径全部枚举出来graph的话我们通过map<string,list<string>>来记录节点和从节点出发可以到达的其他节点,class Solution { public List<List<String...原创 2019-06-19 09:03:45 · 322 阅读 · 0 评论 -
leetcode 127 单词接龙(搜索 java)
就是给一个单词词典,给一个开始词汇和结束词汇,在词典中找出开始词汇转变成结束词汇的过程,求转变次数每次只能转变单词的一个字符可能会有多条路径可以到达,搜索问题可以用DFS BFS解决,DFS更适合搜索有多少条路径,BFS更适合搜索最小深度所以这个题最好是用BFS图的深度优先搜索:一个节点从他能够到达的未走过的节点中选择一个遍历,然后继续往后图的宽度优先...原创 2019-06-19 07:40:35 · 798 阅读 · 1 评论 -
leetcode 174 地牢游戏(hard java 动态规划)
思路就是dp[i][j]表示为了达到右下角,至少有多少血量能够在行走过程中至少保持一滴血要从右下角开始向上推,因为只有在右下角知道最少还剩一滴血,然后向上推,最小血量javaclass Solution { public int calculateMinimumHP(int[][] dungeon) { if(dungeon.le...原创 2019-06-05 22:04:42 · 467 阅读 · 0 评论 -
leetcode 64最小路径和(java medium 动态规划)
由于前面已经做过了不少动态规划了,所以这个题很快能够找出状态转移方程dp[i][j]=Min{dp[i-1][j],dp[i][j-1]}+arrays[i][j]class Solution { public int minPathSum(int[][] grid) { if(grid.length==0) return 0;...原创 2019-06-05 21:27:47 · 255 阅读 · 0 评论 -
leetcode 300 最长上升子序列(java hard 动态规划)
主要思路还是dp[i]表示以i为结尾的最长上升序列的长度,要和dp[i]+1进行比较,j在0-(i-1)的范围class Solution { public int lengthOfLIS(int[] nums) { if(nums.length==0||nums.length==1){ return nums.length...原创 2019-06-05 21:02:56 · 902 阅读 · 0 评论 -
leetcode 120 三角形(medium java 动态规划)
题上说是从上往下,但是其实从下往上求路径是一样的,而且可以避免边界值问题因为从上到下dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])但是从下到上dp[i][j]=min{dp[i+1][j],dp[i+1][j+1}}因为i+1 j+1是已经求过的,所以网上求是不会溢出的javaclass Solution { public ...原创 2019-06-05 20:25:15 · 277 阅读 · 0 评论 -
leetcode 322 找零钱(java medium 动态规划 一维dp )
首先先理解思路不能用暴力贪心,之前的找钱是1 2 5 10之类的生活中存在的钱,现在是任意未知货币现在如果是 1 2 5 7 10组合14就会出现问题,贪心依次是10 2 2 1,四张就不对了,应该是7 7 两张然后就是状态转移的公式推导dp[i]依赖条件是什么后面那个+1很好理解,i-1 i-2 等等,表示往前查看前面位置上需要的钞票数,+1就是加上相应的 ...原创 2019-06-05 12:30:45 · 699 阅读 · 0 评论 -
leetcode 53 最大子段和(easy java 动态规划)
一核心:跟以前的dp不太一样,这个需要换个思路假设dp[i]表示以i为结尾的最长子段的和 它和dp[i-1]的关系就是dp[i]=max(dp[i-1]+nums[i],nums[i])意思就是 包括前面i-1计算出来的子段和, 不包括前面的子段和,也就是只有nums[i]自己一个数class Solution { public int maxSub...原创 2019-06-05 10:54:53 · 205 阅读 · 0 评论 -
LeetCode 114 二叉树转链表
一。题目分析:(1)要求转化为先序遍历顺序,这个很容易想到设置一个链表,然后先序遍历二叉树,把节点和指针记录在链表就好了(2)题目要求in-place,也就是说不允许申请额外空间了,所以不能设置一个新的链表,只能在当前树(左右孩子指针)的结构上做手脚了,而且从图上看最后的二叉树都是只有右子树的。由上图可知,如果右子树不为空,则右子树最后肯定为左子树最后一个靠右的孩子节点的右子...原创 2019-03-16 15:47:21 · 533 阅读 · 1 评论 -
LeetCode 236 最近的公共祖先节点(java)
一、题目分析求两个节点的最近公共祖先节点:(根据LCA定义,一个节点可以是他自己的后代)1、一定在根结点到这两个节点的路径中。2、一定是离根结点最远的公共节点那么代码设计1、要从根结点找到两个节点的路径并记录保存2、找公共节点,并且是最近的公共节点二、java代码1.最简单直白的方法,调用两次找路径函数,分别保存,然后再遍历,找到离根结点最远的...原创 2019-03-04 20:32:01 · 809 阅读 · 0 评论 -
leetcode 51 N皇后
思路:将N个皇后摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式。 若在棋盘上放置一个皇后,它实际上占用了以他为中心,上下左右、左上右上左下右下一共八个方向的位置。要注意,是八个方向,不是八个位置下图思路ok,不过用的是c++罢了 其中,方向数组dx[]={-1,1,0,0,-1,-1,1,1}; dy[]={0,0,-1,1,-1,1,-1,...原创 2018-12-11 22:00:02 · 121 阅读 · 0 评论 -
LeetCode 215. 数组中的第K个最大元素 Kth Largest Element in an Array
题目描述:就是在数组中找到第k大的数(1)第一种方法就是利用sort函数排序时间复杂度 O(NlogN),空间复杂度 O(1)public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length - k];}(2)第二种方法是维护一个K大小的小根堆...原创 2018-11-11 16:18:54 · 412 阅读 · 0 评论 -
leetcode 224 basic calculator简单计算器
首先,简单计算器中就只有加法和减法,左括号右括号数字,也有可能有空格然后,网上大神的代码是public class Solution { // "1 + 1" public int calculate(String s) { if(s==null || s.length() == 0) return 0; Stack&...原创 2018-11-11 15:19:41 · 228 阅读 · 0 评论 -
21 合并两个有序链表 merge two sorted lists &&23 合并k个有序链表 merge k sorted lists
1./** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode merg...原创 2018-11-03 21:12:59 · 148 阅读 · 0 评论 -
138 复杂链表的深度拷贝 copy list with random pointer
问题分析:一个复杂的链表,节点中有一个指向本链表任意某个节点的随机指针(也可能为空),求这个链表的深度拷贝思路:此题有两种方法,一种是按照原链表next的顺序依次创建节点,并处理好新链表的next指针,同时把原节点与新节点的对应关系保存到一个hash_map中,然后第二次循环将random指针处理好。这种方法的时间复杂度是O(n),空间复杂度也是O(n)。第二种方法则是在原链表...原创 2018-11-03 20:54:35 · 159 阅读 · 0 评论 -
86 链表划分 partition list
题目描述:将所有小于x的节点放在大于等于x节点的左侧,并且保证这些节点原来的相对位置,也就是一致性思路:巧用临时节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {...原创 2018-11-03 20:47:15 · 151 阅读 · 0 评论 -
141 Linked List Cycle 判断是否有环&&142 入环节点
1.是否有环非常简单的思路,放进去set中,利用set的find函数遍历链表,看是否出现过以前出现过的节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NU...原创 2018-10-20 10:54:01 · 169 阅读 · 0 评论 -
160. Intersection of Two Linked Lists 相交链表
1、c++(1)不考虑空间复杂度,也就是不是使用O(1)内存,使用了额外的辅助空间,时间复杂度也不是O(N)就是把链表A的节点放入set容器中,遍历链表B,链表B中第一个出现在set容器中的节点就是所求的交点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2018-10-20 10:07:52 · 114 阅读 · 0 评论 -
206&&92. Reverse Linked List (反转链表)1&&2
一、反转链表11.c++解法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pub...原创 2018-10-20 10:09:00 · 123 阅读 · 0 评论 -
Leetcode 804 Unique Morse Code Words
唯一摩斯密码词1.c++做法class Solution {public: int uniqueMorseRepresentations(vector<string>& words) { string morse[]={".-","-...","-.-.","-..",".","..-.","--."原创 2018-05-05 21:32:43 · 144 阅读 · 0 评论 -
657. Judge Route Circle 判断路线成圈
1.c++首先是我最先想到的解法class Solution {public: bool judgeCircle(string moves) { int u_num=0,d_num=0,r_num=0,l_num=0;//定义上下左右走了多少步 int sum=0; for(int i=0;i<moves.length();i++){...原创 2018-05-08 21:18:18 · 241 阅读 · 1 评论