自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 LeetCode题库-216题-组合总和3

这个题目要注意的两个点就是数字范围在0到9之间,而且不能重复使用。

2024-07-27 12:36:24 172

原创 LeetCode题库-212题-单词搜索2

看到这个题目的第一反应,我就想以单词为基础,在网格区域去找,找到了就加入结果当中,算是一种暴力的解法吧。首先以每个单词为基础去找,遍历每个网格,如果网格的字符与单词的首字符匹配,就DFS去深度遍历,DFS按照每个方向去找,这里找的时候要避免重复访问,要设定一个isvisit数组判断,直到找到目标单词为止。

2024-07-24 14:19:58 983

原创 LeetCode题库-210题-课程表2

【代码】LeetCode题库-210题-课程表2。

2024-07-23 14:22:51 166

原创 Leetcode题库-209题-长度最小的子数组

【代码】Leetcode题库-209题-长度最小的子数组。

2024-07-23 13:55:56 194

原创 LeetCode题库-207题-课程表

这个题目就是拓扑排序的思路,题目给定了numCourses个课程以及prerequisites表示课程的关系,而拓扑排序主要考虑每个节点的入度和出度是什么就好了,所以这里我们用ans数组来表示每个节点的入度,用next集合来表示每个节点出度的方向,用queue来表示入度为0的节点,因为入度为0的节点就是拓扑排序的起点。

2024-07-23 13:36:08 356

原创 LeetCode题库-205题-同构字符串

【代码】LeetCode题库-205题-同构字符串。

2024-07-22 14:04:18 216

原创 LeetCode题库-204题-计数质数

另外一个思路就是筛选法。给每个数初始化一个值为true的判断是否为素数的判断位,然后从头开始判断,如果是质数,就将他的倍数改变为非质数。因为我们看假设(n-1)*n,它同样也是n-1的倍数,那我们判断n-1的时候是不是已经判断过了(n-1)*n,所以这里要从i*i开始改变,减少重复。这个题目一开始我就是暴力去做的,就是n个数依次遍历,然后判断他们是不是质数,因为质数的判断只用到sqrt(n),整体的时间复杂度只要到O(n的二分之三次方),但是交上去的时候还是超出了时间限制,所以只能换一个思路。

2024-07-22 13:29:04 226

原创 LeetCode算法-201题-数字范围按位与

我们知道,与操作只要有一个0,就会导致最后的结果为0,题目中给了我们一个范围,从left到right,我们将两个值化为二进制数,不能发现,他们与的结果就是两个端值的最长公共前串,也就是从最高位开始数起,相同的就保留,不同的及其以后的全部变为0,得到的结果就是我们要求的结果。那要怎么求最长公共前串呢,这里采用平移的方法,我们不断将端值的二进制数右移,直到两个二进制数相等为止,得到的就是相同的公共前串,但是要保留位数,就用一个move来记录右移的位数,将得到的最长公共前串在左移回来就可以了。

2024-07-20 13:11:10 227

原创 LeetCode题库-第200题-岛屿数量

【代码】LeetCode题库-第200题-岛屿数量。

2024-07-20 12:44:06 222

原创 LeetCode题库-198和199题-打家劫舍和二叉树的右视图

189题打家劫舍,就是简单的动态规划,首先我们要定义子问题,将totle[i]表示为打劫前i家所能打劫到的最多钱,其中初识值totle[0]的值为0,因为它没有打劫房子,totle[1]的值为nums[0],因为它就打劫了一件房子,然后开始分析写递推关系式,totle[n]=max(totle[n-1],totle[n-2]+nums[n-1]),其中前一项表示,第n家不打劫,后一项表示第n家打劫,两者去较大值就好。这就是一个简单的动态规划的题目。今天做的两个题目都比较简单,所以一起打卡一下。

2024-07-19 13:44:23 256

原创 LeetCode题库-187题-重复的DNA序列

这个题就是典型的哈希表的题目,用哈希表来统计重复出现的字符串,主要用到的方法是map.getOrDefault(temp,0),这个表示:如果map中包含temp,就返回temp对应的value值,如果不包含,就返回0,用这个方法可以方便的统计重复出现的字符串及其出现次数,然后用map.keySet()方法来遍历,判断哪些字符串重复出现了。这个题目就是可以了解一下哈希表的两种方法,以后遇到这种题了也好应对。

2024-07-18 12:55:50 203

原创 LeetCode题库-174题-地下城勇士

今天这个题目有点难吧,是困难类型的题目,地下城勇士。这个题目乍一看是深度优先搜索加回溯的题目,但是一般那样写出来的答案都会超出时间限制,就算加上了剪枝操作,时间效率也不高,所以这里我们采用动态规划的思想。

2024-07-17 15:07:14 143

原创 LeetCode题库-167题-两数之和-有序数组

一开始看这个题目想到的就是用双指针进行暴力算法去做,想着就O(n2)的时间复杂度,应该没事,我还进行了剪枝吧差不多,也就是将内循环大于目标值的可能直接pass,但是最后去验算,还是超出了时间限制,也就是尽管剪枝了,但是时间复杂度没有变小了,然后就只能转变思路了。后面想着升序数组,我们就可以一个一个数去试试,然后通过二分查找的方法去找他的另一半,也就是O(n)的外循环加上O(logn)的内循环得到的思路,总体的时间复杂度是O(nlogn),也就快了不少,达到要求。

2024-07-16 14:24:16 119

原创 LeetCode题库-166题-分数到小数

这个题目难点就在于处理那个循环小数加括号的时候有点难,用到了哈希表去查重来判断是不是无限循环小数,其他的有比较无语的点,就是力扣给的检查示例中有个最小的负数,因为最小的负数的绝对值比最大的正数的绝对值要大1,所以在负数转变为正数的时候,如果我们还用int类型保存的话会超出限制,所以我们在一开始就要设定long类型的数据来代替int类型的数据,避免溢出。其他的这个代码的实质就是除法,本质上就是小学学的除法的那个过程,自己按照那个过程去写代码就可以了,难点就是那个无限循环小数的判断与替代那里。

2024-07-16 13:58:20 215

原创 LeetCode题库-165题-比较版本号

这个题目比较简单,用split函数,依次比较版本号,比大小就好了。但是要注意,split函数拆分“.”要写“//.”来拆分就好了。

2024-07-15 15:19:45 132

原创 LeetCode题库-164题-最大间距(分桶法)

分桶法就是将一串数字分到几个桶里面,桶里面的数的最大差值最多只能是桶的长度,所以最大间距就是桶的长度或者是桶之间的间距,而桶之间的间距就是前一个桶的最小值减去后一个桶的最大值,比较之后得到最大间距。大致思路是这样,但是还有很多问题要思考。最后我这里写的都是我对这个方法的理解,可能就自己看得懂,有需要的小伙伴可以去leetcode上面去看相关题解,作者是 灵茶山艾府 ,真的很厉害。这种方法也是第一次见,是看了大佬的代码写的,时间复杂度达到了O(n),非常厉害。

2024-07-15 14:45:08 449

原创 LeetCode题库-153题和154题-旋转数组的最小数

【代码】LeetCode题库-153题-旋转数组的最小数。

2024-07-14 14:07:19 114

原创 LeetCode题库-152题-乘积最大子数组

初看这个题目,感觉好简单,想着暴力算法直接带过,但是提交上去之后,就超出时间限制了,之后仔细一看发现是动态规划的题目,自己写的还去创造了二维数组,太复杂了,也没有考虑到最小值的可能性,最后去看了力扣上大神的答案,才焕然大悟,差距还是太大了。这个题目由于数组里面的元素有正有负,负数会导致最大的变小,最小的变大,所以还要去维护最小值,然后再用动态规划的思想去做,从子问题开始,一步一步地扩展到整个数组。

2024-07-14 13:39:32 112

原创 LeetCode题库-151题-反转字符串中的单词

这个题目两种思路,我想到的第一种就是用java的方法split去将字符串的单词一个个分开,然后从后往前加上去,但是这里要注意,如果原本字符串单词之间有多个间隔,那么拆分的字符串数组里面会有空的字符串,要注意区分。而且要注意原始字符串的前后有多余的空格,这里用strim发放来统一处理。第二种思路就是双指针来定位单词,从后面开始定位,跳过空格什么的,然后用sustring函数来取出单词,然后加到结果字符串当中,也可以完成,但是算起来复杂一点。

2024-07-14 13:02:59 261

原创 LeetCode题库-150题-逆波兰表达式求值

这个逆波兰表达式就是表达式的后序罢了,也就是每个运算符对前面两个数进行运算,在数据结构里面学到过,将表达式写成二叉树的形式,对二叉树后序遍历就可以得到逆波兰表达式。因为一个字符串,它可以是正负数也可以是运算符,而我们判断字符串是不是一串数字一般辉耀采用integer.valueof的方法去验算,但是运算符用了这个方法会报错,所以我们这里先要检验他是不是运算符,如果不是运算符,就默认他是一个数字。数字我们直接入栈,运算符就根据是什么运算符来进行特定的运算,这里注意除和减法运算的数字的先后顺序就好了。

2024-07-12 15:34:08 219

原创 LeetCode题库-149题-直线上最多的点数

这个题目在leetcode上面居然是一个困难题,但是实现思路非常简单,就是暴力算法,把每条直线循环出来,然后依次判断其他点在不在直线上,其中判断的时候用的是乘法,也就是三个点,两两斜率相等以后,通过十字交叉之后得到的等式,这样可以避免java整型相除时带来的误差,也就更加精确吧。

2024-07-12 15:06:18 174

原创 LeedCode题库-148题-对链表进行升序排序

这里为什么用归并排序呢,因为它的时间复杂度是O(nlogn),而其他常见的排序,比如快速排序,它的最坏情况是O(n2),不一定有归并排序快,而且它的partition还有点复杂,另外的堆排序也比较麻烦,因为leetcode题库里面他的链表数据就只有几个,用堆排序的空间复杂度比较大,因为它的空间复杂度,可能过不了审,所以也不采取堆排序的方法,然而其他常见的排序方法的时间复杂度基本上到了O(n2),所以这里我们采用归并排序的思想来实现这个题目,而且一般的小规模的排序问题一般都采用归并排序来实现。

2024-07-11 14:41:26 176

原创 LeetCode题库-147题-对链表进行插入排序

LeetCode每日练习

2024-07-11 13:58:22 743

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除