- 博客(44)
- 收藏
- 关注
原创 动态规划解决两个正方形的题
两个找正方形的题力扣221:最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4思路动态规划:确定数组的意义。dp[i][j]表示以i,j为右下角的只包含1的正方形的最大边长。确立边界条件。当i=0或者j=0时,正方形的最大边长只能为0...
2020-05-08 17:20:03 371 1
原创 合并k个排序链表
力扣23:合并k个排序链表合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6思路这让我想起了上次腾讯的题,n个数组的topK问题。这个也可以用一个优先队列维护一个最小值,每次都在...
2020-05-01 18:02:06 151
原创 检测子串排列(滑动窗口)
力扣567:字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).思路1:暴力检测写过一个根据输入的字符串输出其中字符的全部排列的函数。可以先生成全部的排列,...
2020-04-29 12:07:31 253
原创 深搜解决字符串和数组的全排列问题
全排列系列题目(深搜)通过两个题目:数组的全排列和字符串的全排列总结一下利用深度优先搜索解决全排列问题的一种思路和代码编写方法。力扣46:数组的全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路定义递归函数backTra...
2020-04-28 19:55:39 258
原创 数组中出现的次数(异或常用)
力扣面试题56-1:数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]要求时间复杂度为O(n),空间复杂度为O(1)。如果使用哈希表来进行访问存储,空间复杂度不符合要求。如果对每个数进行搜索,时间复杂...
2020-04-28 16:16:03 563
原创 堆排序和N个数组的topK问题
堆排序本文主要通过实现一个小根堆排序对堆排序进行一个说明。堆排序具体分为以下几个函数进行实现:heapify(int[] nums, int n, int len)heapInitial(int[] nums, int n)heapSort(int[] nums)heapify(int[] nums,int n, int len);这个函数是堆排序的核心函数,其表示对n为下标的节...
2020-04-27 20:14:11 433
原创 搜索旋转排序数组(变种二分查找)
力扣31:搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,...
2020-04-27 12:22:19 92
原创 优美子数组
力扣:1248 优美子数组给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。示例 1:输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。示例 2:输入:nums = [2...
2020-04-22 21:21:54 425
原创 二叉树的右视图
力扣199:二叉树的右视图返回二叉树站在右边视角能看到的节点值,按照从顶层在底层的顺序。挺简单的一个题目,但是就是没想出来一个好的解法,说明对二叉树的各种遍历还不够烂熟于心。讲一下两个思路:BFS:就是层序遍历的时候将每层的最后一个节点装入结果数组中,很简单的一个思路,实现也很简单,下面直接看代码。class Solution { public List<Integer...
2020-04-22 21:12:11 171
原创 跳跃区间
力扣55:跳跃区间一个BFS、贪心的题,可以好好研究一下:力扣55跳跃游戏。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。在深搜广搜专栏有广搜的解法,这里主要讲讲官方题解的贪心算法,这里主要的思想就是维护一个最远能到达的位置,当最远能到达的位置超过数组长度时就返回true,主要是要吸纳维护最远位置这个思...
2020-04-20 17:23:10 153
原创 跳跃区间
力扣55:跳跃区间一个BFS、贪心的题,可以好好研究一下:力扣55跳跃游戏。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。一开始就用了最普通的暴力BFS,对每个位置,可能的到达的位置都进行入队,然后依次遍历下去,如果nums[i]==0就直接出队,不进行处理。但是这个方法很明显会超时,所以在评论区看到了...
2020-04-20 17:22:01 154
原创 最近的零
力扣542:最近的零力扣542,一道广度优先搜索的经典题型:给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1思路:这个题可以看做从每个0出发,对每个非0位置赋值,值为该位置与0的距离。如果只有一个0,可以从0的位置开始进行广度优先搜索,每搜索一个位置,...
2020-04-20 17:20:22 236
原创 鸡蛋掉落
每周力扣题总结力扣887:鸡蛋掉落这个视频讲的很详细,由浅入深:https://www.bilibili.com/video/BV1Lb411q7Ce?from=search&seid=6248980812420132768接下来记录一下我个人的理解。假设函数drop(k,n)表示有k个鸡蛋,n层楼时需要扔鸡蛋的次数。首先,一道动态规划的题目,需要先确立他的(人类能想到的)边界...
2020-04-20 17:19:21 243
原创 最大子序和
力扣53最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题思路:在构造最大子序的时候,每检查一个新的元素,要考虑的是两个问题:将这个元素加入序列的末尾舍弃老序列,以这个元素开头构...
2020-04-20 17:18:29 126
原创 锯齿层序遍历树
力扣103锯齿层序遍历树给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]思路:还是要多提醒自己,在下笔写代码之前,一定要看清楚题目,一...
2020-04-20 12:15:29 153
原创 岛屿数量
力扣200岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。输入:11000110000010000011输出: 3解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。思路很清晰,通过深搜或者广搜,遍历...
2020-04-20 11:00:30 184
原创 点菜展示表
力扣5389点菜展示表给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第...
2020-04-19 23:56:05 305
原创 数青蛙
力扣5390数青蛙给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 “croak” )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。注意:要想发出蛙鸣 “croak”,青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。...
2020-04-19 23:49:45 592
原创 第一个不重复字符
力扣387给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.解题思路:整体难度不大,第一次遍历字符串利用哈希表载入字符出现次数,第二次遍历哈希表寻找只出现一次的字符即可。这里主要介绍一个哈希的方法。如果是字母哈希,可以利用数组的形式。创建26长度的数组,下标...
2020-04-19 23:33:55 309
原创 4.18周六
每周力扣题总结力扣887:鸡蛋掉落这个视频讲的很详细,由浅入深:https://www.bilibili.com/video/BV1Lb411q7Ce?from=search&seid=6248980812420132768接下来记录一下我个人的理解。假设函数drop(k,n)表示有k个鸡蛋,n层楼时需要扔鸡蛋的次数。首先,一道动态规划的题目,需要先确立他的(人类能想到的)边界...
2020-04-19 09:46:17 104
原创 4.17周五
做题今天做了一个BFS、贪心的题,可以好好研究一下:力扣55跳跃游戏。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。一开始就用了最普通的暴力BFS,对每个位置,可能的到达的位置都进行入队,然后依次遍历下去,如果nums[i]==0就直接出队,不进行处理。但是这个方法很明显会超时,所以在评论区看到了一个进...
2020-04-18 10:41:24 85
原创 4.16周四
做题一道简单的题,力扣56:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].其中这些区间并没有排序顺序,所以先进行排序可以对后续的处理进行简化,这里简单讲讲接口Comparator,以及Arrays.sort()首先,sort函数的几个常用方法...
2020-04-18 10:41:13 69
原创 4.15周三
做题力扣542,一道广度优先搜索的经典题型:给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1思路:如果只有一个0,可以从0的位置开始进行广度优先搜索,每搜索一个位置,就将距离加1,过程可像下面的步骤:当像题目这样出现多个零的情况,只需要在进行广度优先...
2020-04-16 11:40:29 86
原创 4.13周一
做题今天做了一下鸡蛋掉落力扣887,推出递归式之后用直接递归做了一下,因为初始值的问题一直出错,然后又想到了一个边界条件,才做对。但是因为复杂度太高,不能通过力扣AC。但是还是把这个方法记录一下。class Solution { int[][] mark; public int superEggDrop(int K, int N) { return dp(K...
2020-04-14 22:21:43 49
原创 4.14周二
做题今天做了一个两数相加II,力扣445:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7这...
2020-04-14 22:21:21 49
原创 4.8周三
做题力扣204:计算从2~n-1的质数的数量。看了一个高效算法,基本思想就是,如果2是质数,那么22 23 24 25 … 就都不是质数。并且由于12 = 26 = 34 = 43 = 62 在12的根号之后,会有计算重复,所以需要检测的质数只需要小于n的平方即可,可以大大缩短计算时间。class Solution { public int countPrimes(int n) {...
2020-04-13 12:20:48 63
原创 4.10周五
做题今天做了一个单词翻转的题,力扣151:输入: “the sky is blue”输出: “blue is sky the”记录一下几个库函数的用法public String reverseWords(String s) { // 除去开头和末尾的空白字符 s = s.trim(); // 正则匹配连续的空白字符作为分隔符分割 ...
2020-04-13 12:20:33 45
原创 4.9周四
做题今天做了一题力扣22,括号生成,思路和官方题解差不多,但是我的记录优化并没有产生效果,还是要继续研究一下。思路大概这样:任何一个括号序列都一定是由 ( 开头,并且第一个 ( 一定有一个唯一与之对应的 )。这样一来,每一个括号序列可以用 (a)b 来表示,其中 a 与 b 分别是一个合法的括号序列(可以为空)。class Solution { ArrayList[] cache = ...
2020-04-09 23:03:04 65
原创 4.7周二
做题做完了LFU,注意题目中,如果put(1,4),put(1,2)这样的输入,以1为key的使用评率也需要增加,没有考虑到这点所以做错了。然后还做了一个矩阵旋转,我的思路是写一个旋转一圈的函数,然后再从外到内每圈调用,直到全部都旋转完,挺简单的,没啥好说的。...
2020-04-08 09:32:55 127
原创 4.4周记
做题力扣62圆圈剩下的数字通过反推来推出最后一个数字在一开始的数组的位置,就可以找到最后剩下的数字。这个思想还不是很理解,以后可以多注意注意。堆排序建立小(大)顶堆从最后一个非叶节点开始,按倒序对所有非叶节点进行一次heapify操作heapify操作指找到当前所指节点和两个孩子中的最小(大)值,并将其换到根节点。对换下来的节点再递归的进行heapifypublic void h...
2020-04-04 19:17:55 109
原创 4.2周四
做题今天没有做每日一题,感觉今天的题也不好做,而且最近比较忙,下午是虎牙面试,晚上是美团笔试,还要做下周的ppt,所以就看了数组的几个题,下面说一下删除排序数组的重复项看到删除也不能马上从删除的角度考虑,如果真的去删除的话,时间复杂度确实会比较大。这里可以考虑两个游标,i游标用于构建不存在重复元素的数组,j游标用于遍历整个数组。当j游标找到一个不重复的数的时候就在i游标处赋值,下面看一下代...
2020-04-03 21:19:04 66
原创 4.3周五
一天都没干什么活,早上憋了几篇ppt,下午睡了一下午觉,然后做了做每日一题。每日一题今天是做一个字符串转整数,没啥好说的,提几个点。越界的检验:while (idx < n && Character.isDigit(chars[idx])) { int digit = chars[idx] - '0'; if (ans ...
2020-04-03 21:18:19 63
原创 4.1周三
每日一题今天的每日一题有点蠢,一开始没看懂题目,后来看懂了。这里备注一下,所谓不相交的括号指的是,比如一个左括号不能同时属于两个右括号这样子。力扣1111,因为解法不是很明白,感觉意义也不是很大,今天就不讲了。Java今天开始上设计模式,并且看了设计模式的目的代码重用性可扩展性可靠性单一职责原则对类来说,一个类只负责一个职责Java课看了继承、多态继承私有成员变量和...
2020-04-01 22:17:18 73
原创 3.30周一
每日一题力扣62:圆圈中剩下的数字自己用ArrayList模拟实现了一遍,勉强通过测试。在评论区有大佬给出了解释的比较好的数学方法,从删除的最后一个状态进行反推,比官方题解要好,但是看得似懂非懂,先记着,有空再回去做一次。在这个大佬的题解里面也讲了模拟算法,一开始我也纠结使用ArrayList还是LinkedList,因为总得来说,链表的删除比较高效,而这个又是删除比较多的算法。但是大佬提...
2020-03-31 23:16:31 41
原创 3.31周二
今天主要就做了每日一题效率太低了,一整天感觉就写了个快速排序和堆排序,都是些基础,也摆弄了挺久。这里讲一下力扣的快速排序官方题解的partition函数是有bug的,不过因为他用了随机快排,所以bug比较难触发,这里记录一下[3,1,1,0,3]这个序列就会触发他的partition的bug,所以还是用模板partition比较稳妥(被这个破bug坑了一个上午),这里记录一下我写的solutio...
2020-03-31 20:30:19 72
原创 3.29周日
今天第一次参加周赛,作为稳稳的前三选手,看了一下第三题的设计,有个Java题解做的比较简洁,我就照着实现了一遍,下面是题目:力扣5370这个题解是抄的评论区的一个题解,里面还有一点疑问,但是力扣的账号不绑手机不让发评论,不然我就问问他了,手机号被我有一次新建了一个账号,吐了。import java.util.*;class UndergroundSystem { //Key值是站点的名...
2020-03-29 20:36:15 75
原创 3.28周记:字节一面
最长公共前缀面试的时候第二道题被问到了这个,当时只想到对String数组中的每个字母一个一个的往前对比,完全忘记了String类的indexOf方法,字符串的题还是研究的太少。这个方法可以直接返回是否找到String类中是否存在某个子串。和面试官说了一下暴力的思路,他就说这样的话就不用写了QAQ。下面看一下题目和解法吧,总的来说挺简单的一个思路,就是从String数组里面拿到一个子串prefi...
2020-03-28 12:32:38 125
原创 static和final
1 static关键字用于修饰类的成员静态变量用static修饰的成员变量称作静态变量。惊天变量被所有的实例共享,可用“ClassName.valName”的形式来访问。Class Student{ static int classNum;}public class test{ Student stu1 = new Student(); Student stu2 = new St...
2020-03-10 17:04:34 60
原创 List类的一点总结
由于经常用的List实现的类来对数组进行处理,所以今天看一下,做一下总结。1 List一共有三个类实现了Collection,他们分别是***List,Set和Queue***。Java的List是非常常用的数据类型。List是有序的Collection。Java List一共三个实现类:分别是ArrayList、Vector和LinkedList。ArrayList(数组)构造方法...
2020-03-10 11:34:15 100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人