自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 链式编程详解

student.setId(20).setAge(30).setName(“张三”);链式编程的本质就是将每个方法的返回值修改为对象本身,对象本身当然可以继续调用其他方法。

2024-01-03 22:49:28 332 1

转载 【无标题】

序列化是指将Java对象转换为字节流,以便在网络上传输或者存储,这对于分布式应用和持久化存储非常重要。序列化借助ObjectOutputStream,反序列化借助ObjectInputStream方法实现。接口,其不包含任何的方法和字段。在Java将一个对象进行序列化的时候会先检查是否存在该标记,如果不存在会抛出NotSerializableException异常。首先需要明确的是Serializable只是一个。

2024-01-03 22:35:04 19

原创 Java引用类型,如何在子函数中修改main中的值,子函数如何用传参的方式修改父函数元素的值

java中如何通过修改参数的值,从而修改原函数的值在c语言中有指针和地址的定义,而在java中没有那么明确,但是其实本质上一样的,想要搞懂引用就必须大概了解变量是如何被存储的。首先,基本数据类型是直接保存的,而引用类型变量是保存的变量的存储的值而非直接保存数据。例如public void main(String[] args){ int num = 10; String str = "hello"; test(str,num);}public void test(String str

2021-02-02 20:10:20 688 3

原创 SpringBoot数据库配置文件MySql8

一般用yml格式的配置文件删除原来的application配置文件, 重现创建application.yml配置文件以下的Mysql8版本的配置文件, Mysql5不适用spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/myBatis?useUnicode=true&characterEncoding=utf-8&serve

2021-01-26 23:04:13 1076 1

原创 Leetcode 38 Lc外观数列 递归做法

多层循环嵌套, 一定要想到用递归来做, 代码简洁不容易出错class Solution { //层层递进想到递归 public String countAndSay(int n) { if(n==1) //递归第一件事, 递归结束条件 return "1"; String str = countAndSay(n-1); //上一轮的输出是是下一轮的输入 StringBuffer ans = new StringBuf

2021-01-24 13:07:12 135

原创 leetcode 28 字符串匹配算法

解题思路这题其实就是字符串匹配算法题, KMP算法其实还可以用, 但是朴素匹配算法在实际的表现中其实也还可以而且容易理解代码class Solution { public int strStr(String haystack, String needle) { int lens = haystack.length(); int lenn = needle.length(); int len = lens-lenn+1; if(lenn=.

2021-01-18 13:02:17 180

原创 leetcode242 有效的字母异位词

解题思路一道简单题, 首先想到的是用map去做记录所有出现字母的个数和种类两个数组的map做比对就为正确答案, 确实可行但是超越率只有可怜的5%。class Solution { public boolean isAnagram(String s, String t) { if(s.length()!=t.length()) { System.out.println("false"); return false; } //1、存入两个map Map&l

2021-01-13 16:40:50 46

原创 反转数字(考虑溢出情况)

本身题不难, 但是题目限定了考虑溢出的情况1、分解出一个数每个位置上的数2、可以在循环的过程中每次先对先前的数*10, 就可以做到从右向左让这个数慢慢成长3、基于这个条件可以进行判断class Solution { public int reverse(int x) { int ans=0; //遍历的顺序是从右到左 while(x!=0) { int tmp = x%10; //如果当前数>Integer.MAX_VALUE/10, 无论下一个数.

2021-01-12 16:12:11 195

原创 java中Map、Set、List的使用(快速入门、简单上手)

Map、Set、ListList的常用方法1、创建List<Integer> list = new ArrayList<>(); List<Integer> list = new LinkedList<>(); //同时可以作为链表用List<List<Integer>> list = new ArrayList<>();2、遍历//本质上其实是调用Iteratorfor(String s:list)

2021-01-12 09:16:10 363 2

原创 LC 三数之和

三数之和数组问题 最常用解法1、双下标2、排序这道题也从这两个角度出发去解决问题, 排序可以帮助去掉重复解。外循环遍历整个数组{如果元素大于0直接退出循环, 大于0的数字相加不可能为0;如果当前元素和上一个元素一样则直接跳过,避免重复解(难点);以当前元素的后一个元素为L;以数组最后一个元素为R;while(L<R){int tmp = 当前元素+L+R;if(tmp==0){得到解;//重复元素跳过重复解(因为始终占有,当前元素,故不必担心 [-1,-1,2]类似解找不

2021-01-11 21:26:40 121

原创 leetcode 48 旋转图像 LC

一道典型的LC数组题题目要求原地顺时针旋转90度, 一开始就联想到了矩阵的转置,但是矩阵的转置是沿着对角线交换而非旋转。解法一:但是在纸上演算,发现转置后,沿着矩阵的中线 按列对称交换刚好是旋转90度。个人觉得实现难度小 且能击败100%class Solution { public void rotate(int[][] matrix) { //转置 for (int i = 0; i < matrix.length; i++) { for (int j

2021-01-10 17:21:24 212 6

原创 java封装类型

java基本类型 对应的 封装类型基本类型封装类型byteByteshortShortbooleanBooleancharCharsetintIntegerlongLongfloatFloatdoubleDouble封装类型常用的方法1、其它封装类型转为String ,String.valueOf(e)2、‘0’-'9’的char字符用(int)(‘9’-‘0’) , 超过9的数字可以借助封装类方法Integer.

2021-01-09 23:13:46 278 4

原创 矩阵原地转置

Oj上刷到过到简单题没有多想直接 新建了一个数组 按列遍历便草草结束了这道题。但很明显,时间复杂度和空间复杂度都偏高后来在leetcode上要求原地就又思考了一遍。/** * 1、只遍历上三角 * 2、沿着对角线交换 */for (int i = 0; i < matrix.length; i++) { for (int j = i; j < matrix[0].length; j++) { if(i!=j) { int temp = matrix[i][j];

2021-01-09 21:56:51 153

原创 leetcode 36 有效的数独 击败93%

解题思路傻瓜式做法 空间消耗大 , 但是只需要遍历一遍直接根据数独的三个条件逐一进行判断, 不满足直接return false代码class Solution { public boolean isValidSudoku(char[][] board) { //共9个 Set<Character> set1 = new HashSet<>(); Set<Character> set2 = new HashSet<>(.

2021-01-09 21:32:38 88 1

原创 leetcode 283 移动零

解题思路一道非常经典的入门LC题, 如果有学习过数学结构中的数组, 一定知道如何在数组中最高效的删除一个数这道题就可以把0元素直接删除, 最后剩余的空位填补为0即可。代码class Solution { public void moveZeroes(int[] nums) { int curr = 0; //工作指针 for (int i = 0; i < nums.length; i++) { if(nums[i]!=0) nums[curr++]

2021-01-09 15:36:21 55

原创 leetcode66加一

解题思路本来考虑了这个数是不是负数,但是看题目是把数组分割成一个个字符, 所以排除是负数的情况但是如果是负数,可以先转成正数然后-1来做,改一改这题就成了-1?1、需要注意防止最类似999情况,创建一个数组n+1的结果数组2、数组虽然存的是0-9的数字,但是不代表int[] 不能存>=10的数,所以最后一个元素直接+13、从最后一个元素开始判断是否>=10, 两个个位数+1上一位最多只会加1class Solution { public int[] plusOne(int[

2021-01-09 15:21:23 65

原创 leetcode350两个数组的交集

解题思路查找相同的元素,其中有一个难点就是会出重复,每次必须要排除掉被重复记录的数组。想到了归并排序的方法,设置两个工作指针,不相同的时候移动数字小的那个数组的指针。排序算法可以直接调封装好的快速排序,代码不麻烦,且时间复杂度可以接收,遇到数字数组问题,不妨想想看排序后可以有什么巧妙的解决办法代码class Solution { public int[] intersect(int[] nums1, int[] nums2) { //必须先排序 Arrays.sort

2021-01-09 12:44:19 64

原创 是否存在重复元素

利用set不允许重复出现字符自己写的代码public class 存在重复元素 { public static void main(String[] args) { int[] nums = {3,1,-1}; Set<Integer> set = new HashSet<>(); for (int i = 0; i < nums.length; i++) { set.add(nums[i]); } if(set.size()==nums.le.

2021-01-08 16:52:20 69

原创 leetcode旋转数组(有值得回顾的地方)

解题思路暴力法每次旋转1个位置, 旋转k次即为正确答案。旋转的时候也是利用前驱结点来实现的, 前驱结点的更新也借助temp变量, 目前阶段遇到题目不要钻牛角尖, 暴力法能解就暴力法代码class Solution { public void rotate(int[] nums, int k) { int previous; int temp; for (int i = 0; i < k; i++) { previous = nums[nums.lengt

2021-01-07 16:04:04 86 2

原创 leetcode,122数组题

解题思路数组题无非就是双下标1、未持有,价格下降中断则买入2、持有,价格上涨中断则卖出最后一天只卖不买(最后一天的处理感觉代码逻辑冗余,可以尝试更换思路解决最后一天 )代码class Solution { public int maxProfit(int[] prices) { int curr=-1; int money=0; boolean flag=false; // false未持有 , true持有 for (int i = 0; i < .

2021-01-07 10:41:57 79

原创 leetcode990并查集问题

并查集并查集,用于判断一对元素之间是否相连,他们之间是否相连是动态添加的,这一类问题叫做动态连通性问题。主要执行的操作是1、合并2、判断是够处于同一个集合中使用哈希表或者数组实现,存储的元素用于表示 当前结点 指向的 根结点,初始化的时候根结点指向自己。合并操作就是把 一个集合的根结点指向另一个集合的根结点,两个元素的根结点一样则代表元素 处于同一个集合之中。这种表示 不相交集合的方法称之为 代表元法,每个结点的根结点作为一个集合的代表元并查集:最常见的使用就是kruskal最小生成树算法。也

2021-01-06 19:36:07 96

原创 数组删除重复项

给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出新长度后面的元素。本题是leetcode的初级算法题,作为一个新手,看到题目首先的想法就是使用暴力法,暴力法在做初级题的时候其实还是很推荐的,主要原因是在面试做题,复试做题的时候时间基本不会超时。暴力法解题class Solution { public int removeDuplicates(int[]

2021-01-06 13:49:01 315

原创 leetcode 830.较大分组的位置 Java

在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 “xxxx” 分组用区间表示为 [3,6] 。我们称所有包含大于或等于三个连续字符的分组为 较大分组 。找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,

2021-01-06 11:25:14 61

原创 [PAT-乙级]PAT:B1003 我要通过!Java

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:1、字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;2、任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;3、如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母

2021-01-06 11:05:16 85

空空如也

空空如也

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

TA关注的人

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