- 博客(28)
- 收藏
- 关注

原创 学习《阿里巴巴JAVA开发手册》
最近学习了《阿里巴巴JAVA开发手册》,对java编程规范有了更进一步的认识。总结整理了一些个人认为很重要,或者容易被忽略的规约,希望写出的代码都能更规范,更洋气
2019-07-18 11:26:56
199
1
原创 leetcode[169][easy]多数元素
中的所有元素按照单调递增或单调递减的顺序排序,那么下标为 ⌊n/2⌋ 的元素(下标从。尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。日日刷算法,老年痴呆远离我~
2025-01-11 17:24:10
171
原创 leetcode[136][easy]只出现一次的数字
由于set保证元素无重复,因此计算set中的所有元素之和的两倍,即为每个元素出现两次的情况下的元素之和。由于数组中只有一个元素出现一次,其余元素都出现两次,因此用set中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。根据上述三个性质 ,结果数组中的全部元素的异或运算结果即为数组中只出现一次的数字。找出那个只出现了一次的元素。
2025-01-11 17:05:45
335
原创 leetcode[42][hard]接雨水
对于 0≤i<n,leftMax[i] 表示下标 i 左边的位置中,height 的最大高度,rightMax[i] 表示下标 i 右边的位置中,height 的最大高度。对于下标 i,下雨后水能到达的最大高度等于下标 i 两边的最大高度的最小值,下标 i 处能接的雨水量等于下标 i 处的水能到达的最大高度减去 height[i]。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。日日刷算法,老年痴呆远离我~
2025-01-08 13:37:14
747
原创 leetcode[11][medium]盛最多水的容器
我们可以断定,如果我们保持左指针的位置不变,那么无论右指针在哪里,这个容器的容量都不会超过 x∗t 了。也就是说,这个左指针对应的数不会作为容器的边界了,那么我们就可以丢弃这个位置,将左指针向右移动一个位置。在一开始,双指针指向数组的左右边界,表示数组中所有的位置都可以作为容器的边界。在这之后,我们每次将对应的数字较小的那个指针 往另一个指针的方向移动一个位置,就表示我们认为这个指针不可能再作为容器的边界了。此时的左右指针,就指向了一个新的、规模减少了的问题的数组的左右边界。返回容器可以储存的最大水量。
2025-01-07 11:43:44
273
原创 leetcode[15][medium]三数之和
也就是说,我们枚举的三元组 (a,b,c) 满足 a≤b≤c,保证了只有 (a,b,c) 这个顺序会被枚举到,而 (b,a,c)、(c,b,a) 等等这些不会,这样就减少了重复。要实现这一点,我们可以将数组中的元素从小到大进行排序,随后再采用固定第一个元素+用双指针寻找后两个元素的方法,循环便利,就可以得到满足要求的所有解。同时,对于每一重循环而言,相邻两次枚举的元素不能相同,否则也会造成重复。第三重循环枚举到的元素不小于当前第二重循环枚举到的元素。注意,输出的顺序和三元组的顺序并不重要。
2025-01-03 14:35:00
224
原创 leetcode[438][medium]找到字符串中所有字母异位词
因为字符串 p 的异位词的长度一定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造一个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。统计新滑动窗口内的词频时,可以在上一步统计结果的基础上,加上新移入窗口的下标为 i+p.length()的字符,并去掉移出窗口的下标为 i 的字符,以此来降低时间复杂度。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
2024-12-31 23:54:36
321
原创 leetcode[3][medium]无重复字符的最长子串
这里的原因在于,假设我们选择字符串中的第 k 个字符作为起始位置,并且得到了不包含重复字符的最长子串的结束位置为 rk。在每一步的操作中,我们会将左指针向右移动一格,表示我们开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着以左指针开始的,不包含重复字符的最长子串。我们不妨以示例1中的字符串 abcabcbb 为例,找出从每一个字符开始的,不包含重复字符的最长子串,那么其中最长的那个字符串即为答案。
2024-12-31 19:01:25
365
原创 leetcode[2][easy]两数相加
如果当前两个链表处相应位置的数字为 n1,n2,进位值为 carry,则它们的和为 n1+n2+carry;其中,答案链表处相应位置的数字为 (n1+n2+carry)%10,而新的进位值为 n1+n2+carry/10。小技巧:对于链表问题,返回结果为头结点时,通常需要先初始化一个预先指针 dummy,该指针的下一个节点指向真正的头结点 head。由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个 0。
2024-12-30 13:32:04
341
原创 leetcode[16][medium]最接近的三数之和
对于 b 和 c,如果它们在原数组中枚举的范围(既包括下标的范围,也包括元素值的范围)没有任何规律可言,那么我们还是只能使用两重循环来枚举所有的可能情况。当我们知道了 b 和 c 可以枚举的下标范围,并且知道这一范围对应的数组元素是有序(升序)的,那么我们是否可以对枚举的过程进行优化呢?通过不断移动 j 和 k 的位置,来找到a下标为 i 的情况下,最接近tagtet的一组答案。之后不断移动 i 的位置,继续找最接近的答案,并不断更新最接近的答案,最后返回的就是最接近的。中选出三个整数,使它们的和与。
2024-12-25 13:37:53
329
原创 leetcode[283][easy]移动零
从前往后统计每个数字前面有几个0,就将该数字向前移动几位。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。最终统计有几个0,最后几位就补0。你能尽量减少完成的操作次数吗?日日刷算法,老年痴呆远离我~,编写一个函数将所有。
2024-12-24 20:50:16
175
原创 leetcode[21][easy]合并两个有序链表
新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。日日刷算法,老年痴呆远离我~
2024-12-24 13:20:13
483
原创 leetcode[13][easy]罗马数字转整数
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。从前到后遍历字符串,优先看有没有符合条件的两位的组合,有则从map中取出对应值执行加和;通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。列举出来所有的组合(包含两位字母的情况),并放入map。没有则当作一位处理,从map中取出对应值执行加和。给定一个罗马数字,将其转换成整数。日日刷算法,老年痴呆远离我~,即为两个并列的 1。
2024-12-05 13:22:30
883
原创 leetcode[1][easy]两数之和
遍历数组 nums,i 为当前下标,每个值都判断map中是否存在 target-nums[i]的 key 值。如果存在则找到了两个值,如果不存在则将当前的(nums[i],i)存入 map 中,继续遍历直到找到为止。由于哈希查找的时间复杂度为 O(1),所以可以利用哈希 map 降低时间复杂度。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。
2024-12-04 10:52:02
340
1
原创 序列化&反序列化
目录1、基本概念2、使用场景3、JDK中序列化和反序列化API3.1 基本原理3.2 示例(1)类未实现Serializable接口,进行序列化的范例(2)类实现Serializable接口,进行序列化和反序列化的范例4、serialVersionUID的作用4.1 作用4.2 示例5、transient关键字的作用5.1 作用5.2 示例(1)transient属性不被序列化(2)static属性不被序列化6、Externalizable接口
2022-01-21 16:25:56
729
原创 为什么重写equals方法必须重写hashCode方法
目录1、Object类源码equals和hashCode方法的都不重写只重写equals方法equals和hashCode方法都重写总结:1、Object类源码equals和hashcode都是Object对象的方法。因此所有的Java类都会默认继承这两个方法。先让我们来看看Object类源码:/** * Returns a hash code value for the object. This method is * supported fo..
2021-11-25 16:25:18
273
原创 Java访问修饰符
1、Java的四种访问修饰符private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有类都是可以访问的。protected(受保护的)继承访问权限:使用protected关键字,就意味着被声明的成员或方法,在子类以及相同包内的其他类都是可以访问的。default(默认的)包访问权限:即不写任何关键字,就意味着相同包内的其他类(包括子类)可以
2021-11-23 18:19:04
2399
原创 字符编码那些事儿
utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。众所周知,在盘古开天辟地之前,sorry ,走错片场了(⊙o⊙)…在计算机发明的时候 ,由于计算机你只能表示二进制的数据,美帝人民为了交流通信方便,约定了一个编码系统,就是ASCII码,把abc..xyz...ABC...XYZ...!@#...等字符分别和0,1,2,3,4......对应,发现差不多刚好128个
2021-11-23 17:54:59
2025
原创 CONCAT,CONCAT_WS和GROUP_CONCAT
以下表为例:1、CONCAT函数(1)功能将多个字符串连接成一个字符串;(2)语法CONCAT(str1,str2,…)(3)示例语句:SELECT CONCAT(id, query_condition, hotel_id, try_times)FROM test_warehouse_db.query_task; 结果:(4)注意事项返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null...
2021-10-18 23:57:55
296
原创 Cron表达式
1.是什么?Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。2.通用结构Cron有如下两种语法格式:(1)Seconds Minutes Hours DayofMonth Month DayofWeek Year(2)Seconds Minutes Hours DayofMonth Month DayofWeek从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份3.各字段含义每一个域都使..
2021-10-18 21:28:40
141
原创 java 8 函数式编程
读了《java 8函数式编程》,总结一下其中的常用方法,方便平常使用;目录函数式编程Lambda表达式Stream-流1、惰性求值 VS. 及早求值2、常用的流操作Optional其他函数式编程 其核心是:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值; 面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象; L...
2019-11-22 15:50:38
136
原创 学习《阿里巴巴JAVA开发手册》之(一)编程规约
最近读了《阿里巴巴JAVA开发手册》,对java开发规范有了进一步的认识。选取了部分个人认为非常重要且易被忽略的规约共享~
2019-09-23 23:08:22
868
原创 学习《阿里巴巴JAVA开发手册》之(三)MySQL规约
文章目录三、MySQL规约1、建表规约2、索引规约3、SQL规约4、ORM规约三、MySQL规约1、建表规约2、索引规约3、SQL规约4、ORM规约
2019-09-23 15:41:59
456
原创 学习《阿里巴巴JAVA开发手册》之(四)工程规约
文章目录四、工程规约1、应用分层2、二方库规约3、服务器规约四、工程规约1、应用分层2、二方库规约3、服务器规约
2019-09-23 11:50:52
290
原创 Arrays.asList后执行add抛出java.lang.UnsupportedOperationException
1、问题描述调用List的add(..)方法时,程序抛出了java.lang.UnsupportedOperationException,这个List由Arrays.asList(..)得到。代码如下:报错信息如下:调试过程中,发现第一次进入for循环,执行到95行add(..)方法时,程序中断,抛出异常。2、原因分析调用add都能报错,可以看到报错信息:Unsupp...
2019-08-13 15:03:20
367
原创 java比较器
内部比较器思路:需比较的类实现Comparable接口,重写compareTo方法,使该类对外提供一个默认比较的实现。@Getter@Setter@ToString@AllArgsConstructorpublic class UserInnerComparator implements Comparable&amp;lt;UserInnerComparator&amp;gt; { Int...
2018-09-28 17:25:11
161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人