自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java刷题API总结篇

在电话号码的字母组合题中用到,避免字符串增加减少操作,创建新的字符串。

2024-06-09 15:43:12 160 1

转载 HashMap及ConcurrentHashMap

底层通过将 <key,value> 封装成一个对象 entry,然后通过计算 key 的 hashcode 值,再将hashcode 值 与 数组长度-1进行与运算后定位到数组 index,若该 index 无元素,则直接插入,若该 index 有元素,则遍历该位置链表,有该 key 则修改其值,没有则插入(Java 7 使用头插法,Java 8 使用尾插法)不同点:当链表元素个数大于等于 8 时,会判断当前数组长度是否大于64,小于64则进行扩容,大于64,则将该节点的链表转为红黑树。

2024-05-24 15:03:07 23

原创 5. 最长回文子串

主要是考虑到回文子串的性质,回文子串包裹着回文子串,也就是说,如果dp[i][j]代表以索引【i】开始到索引【j】结束的字符串为回文子串(值为true),则dp[i+1][j-1]也为true,所以省去了再一个一个判断的时间。ij两层循环把所有子串求出来,再定义一个方法,使用双指针判断字符串是否是回文字符串,分别判断每一个子串是否是回文子串,记录最长长度和开始位置。

2024-05-04 00:59:16 147

原创 64. 最小路径和

【代码】64. 最小路径和。

2024-05-03 23:15:44 124

原创 62. 不同路径

【代码】62. 不同路径。

2024-05-03 23:06:54 10

原创 32. 最长有效括号

如果是’(‘,就直接push到栈中,如果是’)',移除栈顶元素,判断栈是否为空,如果为空push进去,如果不为空。stack.peek() 返回栈顶元素,但是不移除栈顶元素。

2024-05-03 22:59:18 175

原创 416. 分割等和子集

因为遍历后一行的数据的时候,只会用到前一行的数据,降维之后,遍历后一行的时候,现在dp上存放的就是前一行的数据,所以直接使用更新就好,前提是倒序更新,因为正序更新会破坏上一行数据的完整性。

2024-05-03 22:03:53 166

原创 300. 最长递增子序列

这道题主要是要确定好dp[i]的含义,它的含义是,以第i个数字结尾的最长子序列长度,必须是以这个数字结尾,所以最后答案是,dp数组里最大的元素。

2024-04-29 16:40:53 69

原创 139. 单词拆分

dp递推公式:dp[i] = dp[j] && set.contains(s.substring(j,i))动态规划,dp数组的含义是,dp[i]表示字符串前i个字符是否可以被字典中的字符串表示。

2024-04-29 11:05:47 185

原创 leetcode刷题常用函数总结

【代码】leetcode刷题常用函数总结。

2024-04-28 21:59:05 331

原创 138. 随机链表的复制

【代码】138. 随机链表的复制。

2024-04-26 01:39:06 179

原创 25. K 个一组翻转链表

反转链表比较简单,难的是怎么把反转后的链表和前后链表连接起来,需要定义一个p0指针来起到连接的作用,巧妙的是,反转一个链表后,pre指向本链表的第一个节点,cur指针指向后链表的第一个节点,p0始终记录前链表的最后一个节点,p0.next指向本链表的最后一个节点,四个节点都有了,串起来就好。

2024-04-24 14:01:41 194

原创 24. 两两交换链表中的节点

虚拟头节点记录链表开始位置,像两数交换一样,交换两个节点的位置,cur指针的作用是指向已经交换过的链表的尾部,方便连接两链表。

2024-04-24 11:36:57 226

原创 2. 两数相加

先每一个算出总数,再相加,无法通过测试(原因待查明)正确写法:模拟小学数的加法。

2024-04-24 01:57:57 155

原创 21. 合并两个有序链表

【代码】21. 合并两个有序链表。

2024-04-24 00:46:09 218

原创 141. 环形链表

快慢指针,快指针能和慢指针相遇,说明有环,如果快指针指向了null,说明没有环。

2024-04-23 11:42:01 153

原创 234. 回文链表

先用快慢指针,快指针走两步,慢指针走一步,快指针走完之后,慢指针要不指向后一半的第一个节点(偶数个节点),要不指向最中间的一个节点(奇数个节点),再对后半个链表进行反转,对前后链表进行判断,如果有不一样的值,则不是回文链表。

2024-04-23 01:10:54 257

原创 238. 除自身以外数组的乘积

前缀积 * 后缀积 = 除自身之外的乘积。前缀积,后缀积,类比前缀。

2024-04-21 23:17:22 70

原创 189. 轮转数组

注意翻转步长要对数组长度取模。前翻转,后翻转,整体翻转。

2024-04-21 22:46:47 80

原创 56. 合并区间

对数组中元素按数组第一个元素大小排序,模拟比较,注意最后一项特殊处理,注意[0,4],[1,3]的情况。List转Array方法:ans.toArray(new int[ans.size()][]);排序方法 Arrays.sort(arr,(a,b)->a[0]-b[0]);

2024-04-21 22:20:19 181

原创 53. 最大子数组和

前缀和法:求子数组和,可以用一个前缀和减去另一个前缀和的形式求得,所以题目可以理解为一个前缀和减去另一个前缀和的最大值,类似于股票买卖问题(什么时候买什么时候卖收益最大)。贪心法:从头累加数组,如果累加和小于0,直接舍去(因为对后面的累加和来说会带来不好的影响),sum重新置为0。

2024-04-21 20:36:17 83

原创 239. 滑动窗口最大值

2.**新值入队:**在新的值入队时,把单调队列中比它小的值全部移除,因为这些值不可能是最大值了,移除之后添加进新的值。1.维护一个单调队列,保证队列从右到左是递减排列,且队头元素是滑动窗口中最大的值(的索引)。3.**旧值出队:**添加进新的值之后,判断队首元素是不是还在滑动窗口中,如果不满足就出队。4.把队首元素(滑动窗口中的最大值)放到答案队列中。

2024-04-21 19:36:10 177

原创 560. 和为 K 的子数组

利用前缀和,hashmap记录前缀和出现的次数,两前缀和之差=子数组之和,if(mp.containsKey(pre-k)),说明出现子数组之和等于k的情况。

2024-04-21 15:55:13 201

原创 3. 无重复字符的最长子串

无重复字符串的最长字串,用滑动窗口,右指针一直往右走(for循环中的i充当右指针的角色),每走一步,判断目前子串中是否有当前字符,如果有(最大长度在此类时刻产生),(第一遍做的时候,直接将左指针移动到右指针处,这样做是不对的,因为这个字符不一定就是和前面子串的第一个字符重复,比如说 a d v d s)抽象出来理解就是,右指针每往右走一步,都会把新的字符加进子串当中,左指针的作用就是来移动消除重复的字符。HashSet(用元素不能重复的性质,来判断是否有重复字符)

2024-04-10 21:23:33 214

原创 232. 用栈实现队列

使用ArrayList模拟队列。

2024-04-09 11:23:35 241

原创 20. 有效的括号

1.用栈来配对括号,如果是左括号,直接入栈,如果是右括号,判断是否和栈顶元素配对,若配对成功移除栈顶元素,若配对失败则此题直接返回false。2.配对使用HashMap进行查询,需要先存入配对规则。HashMap存储配对规则。ArrayList模拟栈。

2024-04-09 11:22:14 140

原创 225. 用队列实现栈

用ArrrayList模拟栈,主要考察ArrayList的API用法。

2024-04-09 10:57:00 152

原创 459. 重复的子字符串

可以直接判断 str 中去除首尾元素之后,是否包含自身元素。则表明存在重复子串。情况二:如果字符串 str 不可以由它的一个子串重复多次构成。情况一:如果字符串 str 可以由它的一个子串重复多次构成。

2024-04-09 10:32:52 141

原创 151. 反转字符串中的单词

2.去掉前后空格后,从后向前遍历,index指针向前移动,遇到空格停下,将index到right指针之间的单词遍历移动到StringBuilder对象中,index往前遍历去掉空格,并赋值给right,进行下一个单词的查找。1.去掉字符串前后空格,简便方法是用string.trim()。复杂方法用左右指针判断移动。

2024-04-08 21:07:14 185

原创 541. 反转字符串 II

3.reverse(arr,left,Math.min(right,s.length()-1))这行代码是重点,反转最后一个子数组的时候右指针不一定是right。String.valueOf(char[])------字符串数组转换为字符串。2.难点是确定左指针和右指针的位置,确定要反转几个短数组,进行循环。1.用到了数组反转。

2024-04-08 19:58:03 105

原创 454. 四数相加 II

四个数组,两两配对求和,两层循环,用HashMap中的key值存储两数组之和,value值是key出现次数,后两个数组之和来配对,相加为零配对成功(取相反数,看相反数是否被包含在哈希表中的key值中)

2024-04-08 19:25:15 197

原创 202. 快乐数

一般会想是否会一直加到一个非常大的数字,是不会的(证明麻烦,记住就好)2.一直往后算,会循环回来到一个之前算过的数,构成一个环。1.一直往后算,直到算到1。快乐数,一点都不快乐。

2024-04-08 15:25:20 152

原创 基本数据类型数组去重

基本数据类型数组去重:借用set集合,先转换为set集合,再转换为基本数据类型数组。

2024-04-08 14:52:10 101

原创 349. 两个数组的交集

1.用到了Set集合,要学会集合操作方法,Set集合没有特殊的操作方法,都是Collection的那些方法。2.学会基本数据类型数组,包装类数组,集合之间的相互转化。

2024-04-08 14:26:43 123

原创 242. 有效的字母异位词

巧妙之处在于可以对一个record数组进行 + - ,判断结果是否为0来表示字符串中各元素个数是否相同。可以想到用哈希表,其实数组就是一个哈希表,索引为key,值为value。

2024-04-08 11:03:13 131

原创 160. 相交链表

1 如果不相交 : 如果不相交的话 假设两个链表长度不相等 一个为A 一个为B ,指针第一次走完A会去走B,另一个走完B再去走A,两个指针走的路程都是A+B。会同时为NULL 跳出循环。2如果不相交且链表长度相等: 那么一个指针走A,一个指针走B,它俩同时走到NULL,相等,跳出循环。红线和蓝线走过的路程相等,且第一次相遇的点就是交点。

2024-04-08 10:36:54 129

原创 19. 删除链表的倒数第 N 个结点

左节点和右节点一起向后遍历,当右节点遍历到最后一个节点时,左节点就是倒数第n-1个节点。先遍历一遍链表,得到链表长度,进而得到倒数第n个节点是正数第几个节点。dummyNode技巧应用场景:当head节点有可能被删除时。左右指针节点,右节点先遍历到第n个节点。再遍历链表,进行节点删除操作。

2024-04-08 00:10:17 177

原创 206. 反转链表

反转链表需要三个节点,分别表示前节点,现节点,后节点。每循环一次,现节点就会反转一次。

2024-04-07 23:32:33 95

原创 203. 移除链表元素

链表的入口节点称为链表的头节点也就是head,也就是第一个节点。用到了虚拟头节点,为了让头节点和一般节点一样操作。

2024-04-07 22:19:03 250

原创 GitHub报错push出现fatal: unable to access ‘.../‘: OpenSSL SSL_read:Connection was reset, errno 10054

【代码】GitHub报错push出现fatal: unable to access ‘.../‘: OpenSSL SSL_read:Connection was reset, errno 10054。

2023-04-09 16:40:01 106

空空如也

空空如也

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

TA关注的人

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