Beeemo
码龄3年
  • 41,423
    被访问
  • 87
    原创
  • 42,301
    排名
  • 122
    粉丝
关注
提问 私信
  • 加入CSDN时间: 2019-07-25
博客简介:

Beemo的博客

查看详细资料
  • 4
    领奖
    总分 572 当月 4
个人成就
  • 获得49次点赞
  • 内容获得37次评论
  • 获得96次收藏
创作历程
  • 51篇
    2022年
  • 7篇
    2021年
  • 29篇
    2020年
成就勋章
TA的专栏
  • LeetCode - Java
    60篇
  • 吴恩达机器学习
    5篇
  • Java开发工具
    3篇
  • Android入门
    1篇
  • MySQL入门
    7篇
  • Java入门
    10篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

【LeetCode - Java】50. Pow(x, n)(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 快速幂 先求指数二进制3.2 快速幂 同时求指数二进制3.3 对比1. 题目描述2. 解题思路上一次看见这种类型的题目还是在上一次…例如这个【LeetCode - Java】69. Sqrt(x) (简单),或者更离谱的这个【LeetCode - Java】29. 两数相除(中等)| 地狱难度。于是乎在这里我先尝试了使用牛顿迭代法去逼近,发现这道题若使用牛顿迭代法的目标答案只能转化为 log(ans)log(ans)log(ans) ,显然答案就
原创
发布博客 2022.03.10 ·
112 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】49. 字母异位词分组(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 哈希表计数统计3.2 哈希表外观数列统计3.3 哈希表排序统计3.4 对比1. 题目描述2. 解题思路这道题目的重点在于如何判断字母异位词,这时候我首先就想起了之前做过的一道题目【LeetCode - Java】46. 全排列(中等),在全排列中所有的组合都是相互的字母异位词,那么这样说我是不是可以把字符串数组中的值读取出来,生成他们所有的全排列,判断其是否在数组中从而得出答案呢?按道理来说这样做是肯定没有问题的,但求全排列是一个时间复杂度非常高
原创
发布博客 2022.03.09 ·
259 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】48. 旋转图像(中等)

目录1. 题目描述2. 解题思路3. 代码实现1. 题目描述2. 解题思路假如可以新建矩阵,那么这道题就简单很多了,但只能原地旋转,我们就需要找出旋转前的元素坐标与旋转后元素坐标的对应规律了,画个图会更好理解,图中00,01等都是代表坐标:对于上图矩阵,首先大体思路是一圈一圈进行旋转,在每一圈中对length-1个元素进行选择,length为正方形的边长,那么旋转元素之间的对应关系就应该是这样子,同颜色的对应同颜色的:具体的实际旋转过程为:那么第一层(所有着色部分)的旋转过程如下图所示:
原创
发布博客 2022.03.09 ·
169 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】46. 全排列(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 模拟插入法3.2 DFS回溯3.3 对比1. 题目描述2. 解题思路对于此类排列组合的问题,我们其实是可以找到一定规律的,下面来观察一下:数组是 [1],结果是 [[1]]数组是 [1,2],结果是 [[1,2],[2,1]]数组是 [1,2,3],结果是 [[1,2,3],[1,3,2],[3,1,2],[2,1,3],[2,3,1],[3,1,2]]有没有发现什么规律?数组 [1,2] 比数组 [1] 多了一个2,那么答案就是在
原创
发布博客 2022.03.08 ·
205 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】38. 外观数列(中等)

目录1. 题目描述2. 解题思路3. 代码实现1. 题目描述2. 解题思路既然这是使用递归定义的字符串,那么自然而然我们也使用递归来解决,当然也可以使用迭代实现,有意思的是官方居然整了个“打表”的方法,妥妥地面向测试用例编程了,真的是老奶奶钻被窝,给爷整笑了!3. 代码实现public String countAndSay(int n) { if (n == 1) return "1"; char[] chars = countAndSa
原创
发布博客 2022.03.08 ·
88 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】36. 有效的数独(中等)| 只需一次遍历

目录1. 题目描述2. 解题思路3. 代码实现3.1 哈希表3.2 数组3.3 对比1. 题目描述2. 解题思路题意所示,有效的数独需要满足三个条件:行中无重复、列中无重复和3X3中无重复,因此我们可以用一个哈希表记录元素是否出现过,针对三种不同的情况分别遍历一次数独就可以得出答案了,一共遍历三次,但是这样做比较浪费时间,可以遍历两次就得出答案吗?观察一下发现,其实行的重复判断与列的重复判断可以在一次遍历中同时实现的,只需要把二维数组的下标互换就可以了,这样就需要两个哈希表用于记录元素是否出现过
原创
发布博客 2022.03.08 ·
153 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】34. 在排序数组中查找元素的第一个和最后一个位置(中等)

目录1. 题目描述2. 解题思路3. 代码实现1. 题目描述2. 解题思路仍然是经典的搜索类题目,仍然是使用经典的二分法,但二分法只能查找到一个符合条件的值,如该题意所示需要找到两个值,因此需要执行两次二分法进行查找,一次查找开始位置,一次查找结束位置。其实两次查找算法的大部分逻辑代码都是一样的,按道理来说可以抽取成一个方法以减少重复代码的编写,但由于小部分逻辑判断与当前查找的状态(找开始还是找结束)有关,因此如果抽取函数需要再传入一个状态值进行辅助判断,这里为了代码的可读性,就不进行抽取了。3.
原创
发布博客 2022.03.08 ·
23 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】33. 搜索旋转排序数组(中等)

目录1. 题目描述2. 解题思路3. 代码实现1. 题目描述2. 解题思路对于搜索类的题目最常用的是二分法,但该题目的重点在于如何判断下一个搜索区域是哪一部分,对于普通有序数组而言边界条件是很好判断的,但对于此类型经过旋转的局部有序数组则需要我们分情况讨论:当前值就是目标值:直接返回下标当前值比目标值小:当前值及其左半部分是有序的或右半部分最大值大于等于目标值:搜索右边(如数组[4,5,6,7,0,1],目标值7;数组[4,5,1,2,3],目标值2)当前值及其左半部分是
原创
发布博客 2022.03.07 ·
84 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】29. 两数相除(中等)| 地狱难度

目录1. 题目描述2. 解题思路3. 代码实现3.1 暴力累加(卒 | 时间超限)3.2 循环乘二法(位运算)3.3 ~~对比~~ 吐槽1. 题目描述2. 解题思路对于常规运算而言,乘法与除法其实是一体的,运算也是可以互换的(除以a与乘1/a等同)。那么乘法的本质是什么呢?是累加!3*2所表示的意思就是把3个2累加起来,因此这样推导下我们是可以认为加法运算与除法运算是可以互换的。恰好,这道题目没有限制使用加法,所以我们可以把除数暴力地相加,直至其和大于或刚好小于被除数时,相加的次数就是我们的目标答
原创
发布博客 2022.03.06 ·
296 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】22. 括号生成(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 DFS回溯3.2 小改进+对比1. 题目描述2. 解题思路简单的中等题喜加一!当然前提是你已经做过了【LeetCode - Java】17. 电话号码的字母组合(中等)这道题,两道题的本质思想还是一样的,生成符合规则的字符串,而我个人认为这道题比那道题更进一步,多了一个规则判断(是否合规括号)。借鉴DFS的思想,我们这道题可以利用StringBuilder进行回溯生成目标字符串。要注意的地方只有一个:合规括号在数理上如何表示呢?根据我们的经验不
原创
发布博客 2022.03.05 ·
308 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】19. 删除链表的倒数第 N 个结点(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 遍历两次3.2 遍历一次(数组记忆)3.3 遍历一次(双指针)3.4 对比1. 题目描述2. 解题思路好久没有碰到过这么简单的中等题了,本渣渣大喜!!!言归正传,这道题的常规思路应该是很简单的,遍历两次,第一次算出链表长度,第二次遍历到目标节点的前驱节点即可完成删除操作了。但是嘛,题目叫我尝试用一次遍历,那就试一下吧!既然我要省掉一次那显然是省第二遍了,怎么省呢?用一个带下标的数组存储所有的节点,那样在计算找到目标节点时候就可以直接从数组中取出
原创
发布博客 2022.03.05 ·
355 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】17. 电话号码的字母组合(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 不构建映射表3.2 构建映射表-BFS3.3 构建映射表-DFS3.4 对比1. 题目描述2. 解题思路看到这道题的第一反应就是:先不管它,穷举出来再算!在数字2到6中,起数字与对应的字母都是有规律的,对应的字母都是3个,而开头字母与数字的ascii关系是(char - '2') * 3 + 'a',那7、8和9怎么办呢?似乎只能进行特殊判断了。ok,一个重点解决了,那如何进行这个字符串的构建呢,不就是排列组合嘛,咋们就一层一层来,这时候我想到了
原创
发布博客 2022.03.04 ·
140 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】15. 三数之和(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 暴力(卒 | 时间超限)3.2 改进暴力(卒 | 时间超限)3.3 排序+双指针3.4 对比1. 题目描述2. 解题思路这道题目卡了非常久,暴力算法做不出来,优化后的暴力也不到位,而且需要去除重复的三元组。起初考虑过先排序后再找对应的三元组,这样就可以避免重复的判断提高效率,但后来又感觉排序最快也就O(nlogn) 的复杂度,似乎不太行(因为我以为官解的答案会变态地优化成 O(n) 的复杂度)…结果一看官解…好家伙还真的是先排序,然后跳过一部分的
原创
发布博客 2022.03.03 ·
404 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】11. 盛最多水的容器(中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 顺序暴力+跳过3.2 逆序暴力+早停3.3 双指针3.4 对比1. 题目描述2. 解题思路愣头青的我遇到这种题目还是想妄想先用暴力解法试一下,虽然心中已经做好了要超时的打算,但还是忍不住先写一下唯一能下手的思路。果然不出意外传统的暴力解法是超时的,鉴于我一下子也想不出来其他解法,于是我又开始萌生了优化这个暴力算法使其变得可用的念头。思考了一番两次for循环是雷打不动优化不掉的了,那咋整呢?只能是让某些循环跳过或停止(避免一些无意义的循环计算)
原创
发布博客 2022.03.01 ·
85 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】8. 字符串转换整数 (atoi) (中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 依靠long判断溢出3.2 不依靠long判断溢出3.3 对比1. 题目描述2. 解题思路这道题目要做的第一件事情是消去前导空格,这个简单,String类里面就有trim()函数是做这个事情的。第二个事情,读取首位字符,决定是正数还是负数,还是说以外的字符。在这里要注意的是,我们习惯性思维上都认为如果是正数就直接是数字了,不会出现“+”号,其实是不恰当的,一开始我也是这样思考,直到有一个“+7542”(数字随便编的忘了)的测试用例过不了。因此
原创
发布博客 2022.02.28 ·
235 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】5. 最长回文子串 (中等)

目录1. 题目描述2. 解题思路3. 代码实现3.1 穷举法3.1.1 小改进3.2 动态规划3.3 中心扩展3.4 对比1. 题目描述2. 解题思路遇到没有什么思路的题,决定先用暴力穷举法整一整,求出该字符串的所有子串并依次判断其是否为回文串,然后记录回文串长度的最大值与起始坐标即可。暴力果然好,但时间性能好不了,可以对暴力进行优化吗?我认真观察了一波还真的给我找到一个优化的地方。首先我在设计最初的暴力解法的时候,两层循环是这样定义的:第一层,决定子串的开始下标i,增长,判定条件为不可大于字符串
原创
发布博客 2022.02.27 ·
109 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】3. 无重复字符的最长子串 (中等)| 比官解更优 时间100%

目录1. 题目描述2. 解题思路3. 代码实现3.1 动态划分区域3.2 改进版一3.3 改进版二3.4 对比1. 题目描述2. 解题思路看到这条题目的瞬间脑海中就漂浮了KMP算法的身影,KMP算法是解决子串匹配问题,而这里是寻找最长子串,多少有点相似,但其实这道题目与KMP算法没什么关系。首先,这道题目的简单解法是可以利用嵌套循环来解决的,利用嵌套循环就可以找出以该字符串中的每一个字符作为开头的子串长度分别的多少,显然这种做法时间复杂度太高了,没有实际意义,我们应该寻找一下线性时间复杂度的解法。
原创
发布博客 2022.02.24 ·
298 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】2. 两数相加 (中等)

目录1. 题目描述2. 解题思路3. 代码实现1. 题目描述2. 解题思路这道题目我最初的思路是先把两个链表分别转换为整数再进行相加运算,试了一下之后发现用int会溢出,改用long还是会溢出,显然官方不想我们用这个方法实现,遂放弃。那么只能使用最原始的加法运算方式,个位加个位,十位加十位,也还好该链表是以倒序的形式给出,因此只需要遍历一次链表就可以完成相加进位运算了,这里的重点步骤就是要考虑何时进位。3. 代码实现public ListNode addTwoNumbers(ListNode
原创
发布博客 2022.02.24 ·
293 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】412. Fizz Buzz (简单)

目录1. 题目描述2. 解题思路3. 代码实现1. 题目描述2. 解题思路这道题目的思路很简单,只需要按照题意写一个简单的分支结构就可以实现了。3. 代码实现public List<String> fizzBuzz(int n) { ArrayList<String> list = new ArrayList<>(); for (int i = 1; i <= n; i++) { if (i % 3
原创
发布博客 2022.02.21 ·
100 阅读 ·
0 点赞 ·
0 评论

【LeetCode - Java】387. 字符串中的第一个唯一字符 (简单)

目录1. 题目描述2. 解题思路3. 代码实现3.1 逐位判断 哈希表记忆3.2 统计次数 哈希表3.3 统计次数 数组3.4 逐位判断 数组3.5 对比1. 题目描述2. 解题思路一开始看到这条题目我就产生一种想法,我看到一个数,我再往后看看它还有没有出现不就得了?但当我尝试判断“aabb”这种字符串时发现,判断第一个a是没有问题的,但判断第二个a时后面已经是没有a的存在,会误判,因此在这个算法中必须让他有“记忆”,需要使用哈希表储存前面曾经出现的字符以免误判。实现第一种方法后发现性能不太优,既
原创
发布博客 2022.02.21 ·
393 阅读 ·
0 点赞 ·
0 评论
加载更多