- 博客(61)
- 收藏
- 关注
原创 5.删除链表的倒数第N个节点
那么什么时候停止呢?当fast指针指向最后一个节点时(fast.next()==null)时停止,此时slow指针指向的就是 size - n个元素即倒数第 n + 1个元素,所以我们可以使用倒数 n + 1 个元素来删除倒数第 n 个元素。要删除倒数第几个节点,那么我们需要怎么做呢?我们需要定义两个指针,快指针和慢指针,让快指针先走n步,再让慢指针和快指针一起往后走。
2024-12-12 22:35:26
194
原创 4. 两两交换链表中的节点
我们引入一个虚拟头节点 dummyHead,其 next 节点为 head 节点。由于我们的虚拟节点是在 head 前,所以我们上面的循环条件要多加一个 next 指针。这是我这次离独立写出中等题最近的一次,大体的思路已经写出来了,但是不知道应该怎么返回真正头节点的(以后发现头节点发生改变的一定要记得引入虚拟头节点!在我们的循环中,我们定义 L1 为两个节点中的第一个节点(cur.next), L2 为节点中的第二个节点(cur.next.next)。
2024-12-12 22:28:19
390
原创 6.数组小结:
已经使用过Python刷题过一遍,现在使用Java刷题,感觉很多是已经有思路了,并且能明白为什么要这样去做,以后复习主要的重点主要是。
2024-12-10 11:30:39
148
原创 5.螺旋矩阵II
那么要循环几次呢,如3 * 3的矩阵,当我们走完一圈后,只需要填充中心即可;如5 * 5的矩阵,当我们走完两圈后,只需要填充中心即可…若是基数,那么我们需要填充中心。我们发现中心点的坐标是在对角线上的,且每次循环完,下一次开始的x和y都在靠近中心点,所以我们若是奇数n,其在完成循环结构更新完x和y退出时,其x和y共同组成的就是我们的点坐标==(x,y)==我们需要顺时针地输出,这看上去很简单,且不涉及算法,但是我们需要确定我们的边界条件,倘若我们一会左闭右开,一会左闭右闭,那么我们的程序会非常的混乱。
2024-12-10 11:19:11
140
原创 4.长度最小的子数组:
定义一个快慢指针,先让快指针往后移动,直到找到和大于等于 target ,更新len然后让慢指针往前挪动,当慢指针和快指针组成的和小于target时,让快指针继续往后遍历并让慢指针停止,直到快指针和慢指针之间的区间之和大于等于 target,以此往复,直到遍历完数组。
2024-12-09 23:04:01
199
原创 3.有序数组的平方
我们发现了一个规律,最大的值只可能出现在开头和结尾,所以我们可以使用双指针法,一个strat指针指向首元素,一个end指针指向尾元素。我们只要比较这两个元素的绝对值,那么我们就得到了最大的值,将其添加到新数组的末尾即可。然后将首(或者尾指针)向前(向后)挪动1位置,直到。由于非递减,所以是有序的,但是由于不是全是正数,存在负数,所以我们不能直接通过比较数字的大小来获取平方后的顺序,那应该怎么办呢?组成的新数组,要求也按。
2024-12-09 22:45:44
340
原创 20、反射:
反射允许对封装类的字段,方法和构造函数的信息进行编程访问。(API中的描述)反射可以将成员变量,成员方法,构造方法获取出来,再进行操作(比如IDEA中的提示功能,就是反射机制的体现)。
2024-12-09 22:23:35
715
原创 19、网络编程:
套接字(Socket)开发网络应用程序背广泛采用,以至于成为事实上的标准;通信的两端都需要Socket,是两台机器间通信的端点;网络通信实际上就是Socket间的通信;Socket 允许程序把网络连接当成一个流,数据在两个Socket 间通过IO传输;一般主动发起通信的应用程序属客户端,等待通信请求的为服务端(监听)。类DatagramSocket 和 DatagramPacket[数据包/数据报]实现了基于UDP协议网络程序;
2024-12-08 22:10:27
654
原创 2. 移除元素
设定两个快慢指针,同时移动每次都只移动一个数据单位,当第一次遇到我们要寻找的target时,那么slow会停止一次更新,从而其指向的位置就是我们要更新的位置,只需要将fast指向的元素赋值给slow指向的位置处即可。两层for循环,一层用来查询要删除的数组,另一层循环用于挪动后面的数组。
2024-12-07 17:36:58
315
原创 18、IO流:
文件,对我们并不陌生,文件时保存数据的地方,比如我们经常使用的word文档,txt文档,excel文档…都是文件。它既可以保存一张图片,也可以保持视频,声音。是抽象类 InputStream 的子类创建一个指向 File 对象表示的文件输出流。创建一个指向具有指定名称文件的写入输入流。创建一个指向 File 对象表示的文件输出流,此时的模式是追加,而不是覆盖(光标在文件末尾而不是开头)。
2024-12-05 16:55:36
577
原创 17、线程(基础):
在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性;每个对象都对应一个可称为==“互斥锁”==的标记,这个标记用来保证在任一时刻,只能有一个线程访问对象;关键字 synchronized 来与对象的互斥锁联系。当某个对象用 synchronized 修饰时,表明该对象在任一时刻只能由一个线程访问;同步的局限:导致程序的执行效率要降低;同步方法(非静态):其锁可以是this本身或者是其它对象(只要求想要同步的线程必须锁的是同一个对象即可);
2024-12-03 12:17:29
987
原创 383. 赎金信
一开始我看到这道题,觉得和四数相加很类似,准备创建一个HashMap来存储key:a~z,value:为次数,的这样一个键值对,更新就使用刚刚提到过的 map.getOrDefault(key, default)方法。然后,对赎金信件也进行遍历,使用map.getOrDefault方法更新,只是现在要写成map.put(key, map.getOrDefault-1)来进行更新。但是实际上这道题最类似的是我们最开始做的,异位词那道题,使用数组存储即可,没必要用到map,使用数组会更加简单。
2024-12-02 13:39:27
216
原创 454.四数相加II
首先,我们只要求四个数组中各出一个元素之和为0,直接for循环遍历,显然时间复杂度过于离谱了。然后,再计算另外两个数组直接元素的和,在我们的 map 中,寻找是否有为其相反数的 key,将key 对应的次数累加到 res上,若没有,就累加0。那这么样才能将 次数更新到对应的数组和中呢,这需要一个方法getOrDefault(key, default)——在下面会给出展示。若key存在,返回其对应的value,若key不存在,返回我们设定的默认值 default。这道题为什么可以拆解为两两数组之和?
2024-12-02 12:18:36
323
原创 1.两数之和:
我们可以定义一个中间变量 temp = target - nums[i],然后去查找 temp 是否已经出现过了,如果出现过了,那不就说明我们寻找到了我们要找的两个数了吗(一个为 temp——以前存放的nums元素,另一个是现在的 nums[i] ),那我们只需要返回 temp 对应的下标 以及当前的 i即可。我们可以知道,不会出现输入的数组是[3,3,4],target 为 7的情况,这样我们的答案不唯一,没法操作。好的,现在我们理清了题目的要求,那我们可以开始做题了。整数,并返回它们的数组下标。
2024-12-02 11:26:08
406
原创 202. 快乐数:
所以我们可以使用哈希表,不断将我们的n值传递进去,在循环条件中判断 我们创建的集合是否已经包含了 n 这个元素,要是包含了,就说明构成了无限循环,若没包含,那么我们就继续更新 n ,直到 n 是1或者 n 已经存在于哈希表中。好的,现在我们知道了怎么判断快乐数了,但是又有一个新的问题,怎么知道是不是无限循环呢?,那么这个数就是快乐数。我们先编写一个更新函数,返回的结果为每个位置的数字的平方和,这个很好写,就不赘述了。什么是快乐数呢,其实没必要管它的那一段话,我们只需要知道,当结果为1时,就是快乐数。
2024-12-01 23:41:25
355
原创 349. 两个数组的交集:
并不需要,我们可以直接创建一个 resSet 来存取数组的交集,怎么判断是否要添加呢?HashSet中提供了contains(key)来判断是否存在该元素,若 nums2 中的元素存在于 set1 中,那么就将该元素添加到 resSet 中。所以我们需要进行类型转换,或者将 resSet 中存储的对象存放到一个 int[] 对象中。我们先创建一个编译类型为 Set 的 set1,泛型设定为,用来将 nums1 中的数据取出,并存放于 set1 中(使用HashSet的add方法)。
2024-12-01 22:15:49
298
原创 0.Hash表的理论基础:
当我们遇到了要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法。但是哈希发是牺牲了空间换取时间。若我们在面试或者算法题中遇到需要判断一个元素是否出现过的常见,那我们应该想到哈希法。
2024-12-01 21:45:56
291
原创 242.有效的字母异位词:
从a~z(本题只考虑小写)一共有26个字符,且其ASCII码是连续的,我们可以使用数组去存储他们。我们再去看下什么叫字母异位词(字母种类数量相同,同种字母数量相同),我们以及解决了字母哦按段字母的种类,现在要做的就是将字母的数量存储到对应的字母索引位置即可,好,那么我们现在已经解决了一个字符串的存储问题了,那我们是否需要开辟两个数组呢?就是不同字母种类个数相同,且同种字母个数相同的两个字符串,类似于 abbc 和 bbac。最后,我们只需要看我们的数组中的值是否均为0,即可以判断是否为异位词了。
2024-12-01 13:59:47
242
原创 15、泛型:
泛(广泛)型(类型)E——其能够表示一种数据类型,可以由我们指定(表示数据类型的一种数据类型)。泛型又称参数化类型,是JDK5出现的新特性,结局数据类型的安全性问题;在类声明或实例化时只要指定好需要的具体的类型即可;Java 泛型可以保证如果程序在编译时没有发生警告,允许时就不会产生ClassSetException异常,同时,代码更加简洁,健壮。泛型的作用:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法返回值的类型,或者是参数类型。(举例如下文代码)/***//*
2024-12-01 13:14:24
668
原创 14、集合:
接口 Iterator——是Collection的父接口Iterator 对象称为迭代器,主要是用于遍历 Collection 集合中的元素;所有实现了 Collection 接口的集合类都有一个 iterator() 方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器;Iterator 的结构——看一张图;Iterator 仅用于遍历集合,Iterator 本身并不存放对象。List 集合类中元素有序(即添加顺序和取出顺序一致),且可重复;
2024-11-30 19:53:03
582
原创 13、常用类:
equals——区分大小写,判断内容是否相等;equalsIgnoreCase——忽略大小写的判断内容是否相等;length——获取字符的个数,字符串的长度;indexOf——获取字符在字符串中第一次出现的索引,索引从0开始,若找不到,返回-1;lastIndexOf——获取字符在字符串中最后出现的索引,索引从0开始,若找不到,返回-1;substring——截取指定范围的字串;trim——去前后空格;
2024-11-24 21:40:33
827
原创 12、异常Exception:
java语言中,将程序执行中发生的不正常情况称为“异常“。(开发过程中的语法错误和逻辑错误不是异常!Error(错误):java虚拟机无法解决的严重问题。如JVM系统内部错误,资源耗尽等严重情况。Exception:因编译错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。其还能继续细分。运行时异常(RUNTIME),在程序运行时会发生的异常;编译时异常,编译器检查出的异常。异常处理就是当异常发生时,对异常处理的方式;
2024-11-20 22:23:46
884
原创 11、枚举与注解:
枚举——enumeration;枚举是一组常量的集合;可以这样理解:枚举是一种特殊的类,里面只包含一组有限的特定的对象不需要提供 setXxx 方法,因为枚举对象值通常为只读;对枚举对象/属性使用共同修饰,实现底层优化;枚举对象名通常使用全部大写,常量的命名规范;枚举对象根据需要,可以有多个属性。/***/// 演示自定义枚举的实现// 1.先把构造器做成私有的形式,防止直接被 new// 2.删除 setXxx 方法,保证只读;
2024-11-18 10:50:12
437
原创 10、面向对象编程(高级)
类变量也叫做静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。访问修饰符 static 数据返回类型 方法名(){}——推荐;static 访问修饰符 数据返回类型 方法名(){}。又称为初始化块,属于类中的成员【是类的一部分】,类似于方法,将逻辑语句封装在方法体内,用{}包围起来;
2024-11-17 21:54:20
1002
原创 09、房屋出租系统项目:
09、房屋出租系统项目:项目需求说明:实现基于文本界面的《房屋出租软件》能够实现对房屋信息的添加、修改和删除(用数组实现),并能打印房屋明细表。项目界面:主菜单:----房屋出租系统—新增房屋查找房屋删除房屋修改房屋信息房屋列表退出子功能界面——新增房屋:----添加房屋----姓名:电话:地址:月租:状态(未出租/已出租)----添加完成----子功能界面——查找房源:----查找房屋—请输入你要查找的id:显示该id对应的房屋信息;
2024-11-12 21:51:21
780
原创 08、Java学习-面向对象中级:
file -> settings -> editor -> Live templates -> 查看有哪些模板快捷键/可以自己增加模板。模板可以高效地完成开发。不过,建议新手暂时不用哦,还是再熟悉熟悉代码。公开级别:用public修饰,对外公开;受保护级别:用protected修饰,对子类和同一个包中的类公开;默认级别:没有修饰符号,向同一个包中的类公开;私有级别:用private修饰,==只有类本身可以访问,不对外公开。==6访问级别访问修饰控制符同类同包子类不同包公开。
2024-11-09 22:50:10
956
原创 03、线性回归模型(多个参数)——Linear Regression with Multiple Variables
x:第j个特征(jth feature),在数据集上表示为一列;j ≤ n。n:表示特征(feature)的个数(number of features);x:表示第i个训练实例的特征向量(在数据集上体现为一行);xji:表示第i个训练实例的第j个特征的值。
2024-11-06 20:24:44
878
原创 02、线性回归模型(一个参数)——Linear Regression with one vraiable
Supervised Learning model Data has “right answers”(监督学习的数据有正确答案——标签)监督学习算法会输入一个数据集,然后监督学习算法会产生一些功能(function,f),f的工作就是采用新的输入x和输出(y)并进行估计或预测。⇒→在监督学习中,training set(训练集)包括feature(输入特征)和target(目标)。
2024-11-05 19:11:34
560
原创 01、机器学习概述
数据只来自输入且不输出标签,算法只寻找数据间的结构(Data only comes with inputs x, but not output labels y. Algorithm has to find structure in the data.)
2024-11-05 19:11:03
550
原创 07、Java学习-类与对象(面向对象初级):
一个程序可以看作是一个世界,其内部含有很多事物(对象——对象有属性和行为)。类——把一类事物(如猫,狗)的特征(属性)和行为提取出来;是我们自定义的数据类型。对象——就是一个实例(若类是猫,实例就是一个实际存在的猫,如上文的小白)。再解释的清楚一点就是,人类就是一个类,而你就是一个对象。创建一个对象;实例化一个对象;把类实例化。// 单独用变量解决问题: => 不利于数据的管理,因为我们把猫的信息拆解了。String cat1Name = "小白";
2024-11-03 12:15:08
720
原创 06、Java学习-数组与排序:
可以理解为一维数组的一维数组,什么意思呢?就是一维数组里的每个元素存储的不再是基本数据类型了,而是引用类型数组。
2024-10-30 23:18:26
815
原创 04、Java学习-运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。算数运算符;关系运算符(比较运算符);逻辑运算符;位运算符(需要二进制基础);三元运算符;
2024-10-28 11:44:33
291
原创 03、Java学习-变量
这一天主要学习Java中的变量。(一天没学完悲,在43/910处倒下了,今天专注力太差了,本来是打算至少学到60/910处的)。虽然前面讲的真的特别基础而且我本身也有C++和Python的基础,但是也有认真记录啦,准备看看能不能查漏补缺。明天继续加油(感觉得开个番茄钟了,不然一直玩炉石)。第三天,学到61/910处~,今天收获还蛮多,居然基础语法里面也有那么多和C++不一样呀,不过还是最近Python敲多了,还是不习惯敲;了,哈哈,慢慢改回来lol。
2024-10-24 23:24:30
698
3
原创 02、Java学习-快速入门:
全程为Java Development Kit,即Java开发工具包,JDK = JRE + java的开发工具【java,javac等】是提供给开发人员使用的,包含了java的开发工具,也包括了JRE。全程为Java Runtime Environment,Java运行环境;JRE = JVM + Java的核心类库【类】如果想要运行一个开发好的Java程序,安装JRE即可。将Java源文件通过编译器编译成JVM可以识别的字节码文件;
2024-10-22 23:35:35
848
原创 2.链表(代码随想录——python版本)
如果我们建立了一个链表节点head,并将其赋值给了tmp,那么它们操作的便是同一份链表,tmp对链表的操作也会影响到head对链表的访问。
2024-10-21 21:44:52
1109
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人