- 博客(83)
- 资源 (1)
- 收藏
- 关注
原创 小笔记之Integer.MAX_VALUE+1
在写剑指Offer第16题,数值的整数次方时出现了一个测试用例2.00000-2147483648需要做的是将-2147483648取为2147483648,于是就exponent = -exponent;但是发现,该数没有变?于是百度发现:Integer.max_value = 01111111 111111111111111111111111 01111111111111111111111111111111+1= 10000000 00000000 00000000 00000000
2020-09-12 18:07:40
590
原创 小笔记之Java中的浮点数判断
通常使用判断大小,我们习惯性使用==,但其实计算机中再表示浮点数都有误差,因此关于浮点数的判断需要更加细心。方法一:一般来说我们比较浮点数大小,定义一个精度范围例如:PRECISION = 0.000001f将两数相减,然后比较是否超出这个精度范围。方法二:Double具有特殊的比较方法:Double.doubleToLongBits(你的Double值) == Double.doubleToLongBits(你的Double值)因为Double俗称双精度,比float更为准确,所以
2020-09-12 16:00:55
699
原创 LeetCode 7.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21两个思路,第一个使用余数,第二个使用字符串:方法一:public int reverse(int x) { int result = 0; while(x!=0){ int tmp = x%10; x/=10
2020-09-05 10:17:18
198
原创 Leetcode 5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”方法一:时间超限,自己思路:将字符串赋给map集合,字符为键,下标为值,值为集合,集合中存储的都是每个字符重复的下标根据每个entry的值,获取每个字符对应的集合。遍历集合,每次从集合中拿出两个值,一个作为起始 一个作为终点,两个值截取的字符串判断是否为回文
2020-08-09 09:48:16
156
原创 Map集合,一个Key值对应多个Value
解题时考虑到,如何将一个Key值对应多个Value方法:String s = "sdgkdfnkhnf";Map<Character,ArrayList<Integer>> map = new HashMap<>();for(int i = 0;i<s.length();i++){ ArrayList<Integer> list = null; if(map.get(s.charAt(i)) != null){ list = map.ge
2020-08-08 11:06:48
1825
原创 LeetCode 3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
2020-08-08 09:49:17
120
原创 Leetcode 2.两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解答方法一:自己拼凑的写法:自己总结需要解决三个问题:
2020-08-06 20:26:45
101
原创 算法12(旋转数组的最小数字)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0方法一:循环遍历法(暴力求解)根据旋转数组的特性,数组中突然变小的数字必为最小。若无则返回第一个数字class Solution { public int minAr
2020-07-26 11:22:49
126
原创 算法10(斐波那契数列)
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5方法一(不可行
2020-07-18 11:39:51
429
原创 算法09(用两个栈实现队列)
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:方法调用次序: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:方法调用次序: [“CQueue”,“deleteHea
2020-07-17 13:11:31
85
原创 算法07(重建二叉树)
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7以下是用递归写出的方法,使用了时间换空间的做法,因为无法动态加载数组。package Mypage;public class Solution {
2020-07-16 15:48:22
92
原创 15.1 Java之JDBC
Mysql在使用JDBC之前要先安装Mysql,这里不详说如何安装。安装配置完成之后,打开cmd,输入mysql -V,若有版本号则安装成功。JDBC基础导入jar包,Maven的pom.xml初始化驱动:Class.forName("com.mysql.jdbc.Driver");将该类加载到JVM中。建立连接:三个参数:数据库url,用户名,密码//数据库url:"jdbc:mysql://本地连接:端口号/数据库名称?数据格式" Connection connection
2020-07-16 09:51:50
122
原创 14.1 XML基础
XML简介XML(eXtensible Markup Language)可扩展标记语言。主要用于数据的存储和传输。特点: - 纯文本,使用UTF-8的编码模式 - 可嵌套,适合表示结构化数据。XML中有固定的格式,XML首行为:<?xml version="1.0"?>XML的格式分为两种: - 格式正确,是指格式是正确的元素需正确嵌套,如:`<isbn lang="CN">1234567</isbn>` - 合法,是指格式正确且可
2020-07-14 18:58:48
126
原创 13.1Java之网络编程
简介网络编程:是指编写运行在多个设备上的程序,这些设备通过网络连接。网络编程三要素:协议:TCP、UDP。这两个新协议最重要的区别是:TCP是可靠的,有连接的。UDP是不可靠的,无连接的。IP地址:分为IPV4和IPV6两种。本地IP为127.0.0.1或localhost端口号:用来标识设备中的进程(0~65535,1024之前的被系统分配因此不能使用)java.net包中包含了解决通信问题的类和接口,从而不用关注通信细节。TCP编程分为客户端和服务端:客户端:Java中提供了ja
2020-07-13 20:20:51
115
转载 12.1 Maven基础
Maven的作用相同的目录结构:Maven管理下的Java项目有相同的目录结构。统一的jar包:Maven下有专门管理jar包的仓库,需要时引用即可。Maven下载:(2020/7/13)下载Maven配置:解压到某个目录,复制D:\Maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin此电脑→属性→高级系统设置→环境变量→系统变量→Path→最前边加上:D:\Maven\apache-maven-3.6.3-bin\apache-maven
2020-07-13 12:56:04
132
原创 算法06(从头到尾打印链表)
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:head = [1,3,2]输出:[2,3,1]方法一:使用栈,因为栈的特点是先进后出,可以直接反向输出。package MyTest;import java.util.Stack;public class MyStack{ public static void main(String[] args) { ListNode listNode1 = new ListNode(1); ListNode listN
2020-07-12 08:54:06
149
原创 11.10Java多线程之线程池
Java中虽然创建和销毁线程方便,但是特别浪费时间 ,因此出现了线程池。线程池内部维护了多个线程,当没有任务时就处于等待状态,出现新任务就分配一个空闲线程执行,执行完成继续等待下一次调用。若所有线程处于忙碌,则该任务要么等待,要么创建新的线程。Java中线程池的接口为:ExecutorService实现类为:FixedThreadPool:线程数固定的线程池;CachedThreadPool:线程数根据任务动态调整的线程池;SingleThreadExecutor:仅单线程执行的线程池。i
2020-07-11 15:37:30
93
原创 11.9Java多线程之ReentrantLock锁
ReentrantLock锁时Java5开始引入的java.util.concurrent.locks包中提供的一个锁。代替了synchronized加锁:public class Counter { private final Lock lock = new ReentrantLock(); private int count; public void add(int n) { lock.lock();//加 try {
2020-07-11 11:30:27
113
原创 11.8Java多线程之线程的等待和唤醒
Java中当一个任务队列为空时,线程无任务可执行,需要进入等待状态。class TaskQueue { Queue<String> queue = new LinkedList<>(); public synchronized void addTask(String s) { this.queue.add(s); this.notifyAll(); } public synchronized String getT
2020-07-11 11:23:55
182
原创 算法(剑指Offer05 替换空格)
题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。例:输入:s = "We are happy."输出:"We%20are%20happy."方法一:该方法是我第一次就想到的,因为是刚学完正则表达式,所以尝试一下,该方法没有任何意义。public String replaceSpace(String s) { return s.replaceAll("\\s", "%20"); }方法二:该方法是看解析找到的,认为比较好的一个方法:即迭代字
2020-07-11 09:36:35
94
转载 算法(剑指Offer04 二维数组中的查找)
问题描述:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定
2020-07-10 17:36:17
97
原创 11.7Java多线程之可重入锁和死锁
可重入锁:public class Counter { private int count = 0; public synchronized void add(int n) { if (n < 0) { dec(-n); } else { count += n; } } public synchronized void dec(int n) { coun
2020-07-10 16:12:51
123
原创 11.6Java多线程之线程同步
Java中线程同步是利用了加锁解锁方式实现的。加锁解锁之间的代码块为临界区,任何时候临界区只能有一个线程执行。Java中使用了一个关键字对一个对象加锁:synchronized以下例子证明了锁的应用:package MyThread;public class MyLock { public static void main(String[] args) throws Exception { Thread add = new AddThread(); T
2020-07-10 15:25:28
99
原创 11.5Java多线程之守护线程
守护线程:为其他线程服务的线程。在JVM进程退出时,不必关心守护线程是否结束。创建守护线程Thread t = new MyThread();t.setDaemon(true);t.start()使用setDaemon()方法。守护线程不能持有需要关闭的资源。...
2020-07-10 11:35:58
94
原创 11.4Java多线程之中断线程
中断线程有两个方法:方法一:使用Thread实例的interrupt()方法。public class Main { public static void main(String[] args) throws InterruptedException { Thread t = new MyThread(); t.start(); Thread.sleep(1000); t.interrupt(); // 中断t线程
2020-07-10 11:26:45
102
原创 11.3Java多线程之线程的状态
线程有以下的状态:New:新创建的线程,尚未执行;Runnable:运行中的线程,正在执行run()方法的Java代码;Blocked:运行中的线程,因为某些操作被阻塞而挂起;Waiting:运行中的线程,因为某些操作在等待中;Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待;Terminated:线程已终止,因为run()方法执行完毕。线程终止的原因有三种:正常终止:run()方法执行完毕意外终止:run()方法执行捕获异常,被迫终止。强制终止:对
2020-07-10 10:43:44
91
原创 11.2Java多线程之新建线程
多线程的创建:方法一:public class Main { public static void main(String[] args) { Thread t = new MyThread(); t.start(); // 启动新线程 }}class MyThread extends Thread { @Override public void run() { System.out.println("start new
2020-07-10 10:17:40
79
原创 11.1Java多线程基础篇
进程:我们把一个任务称为一个进程。例如:浏览器、视频播放器、word等都是进程。线程:进程中分很多子任务,这些子任务就是线程。例如:word打字过程中,进行着拼写检查。进程线程关系:进程可以包含多个线程,但至少有一个线程。实现多任务的方式:多进程模式(每个进程只有一个线程)多线程模式(一个进程有多个线程)多进程+多线程模式(复杂度最高)在具体实现时,要考虑到进程和线程的特点。多进程的缺点:创建进程开销更大。进程间通信比线程慢,线程间通信是读写同一个变量。多进程的优点:稳定性高,
2020-07-10 09:47:49
79
原创 10.1Java之正则表达式
正则表达式:是用字符串描述的一个匹配规则,使用正则表达式可以快速判断给定的字符串是否符合匹配规则。(java.util.regex)使用str.matches(String re1),返回值为boolean类型。转义字符:正则表达式在Java中是一个字符串,因此,在表达“\”时,需要用到“\\”。在正则表达式中,表示一个特殊字符需要用到转义字符“\”。例“&”在正则表达式中为“&”。Java中的正则表达式为“\&”。匹配任意字符在Java中,正则表达式用“.”表示任意字符
2020-07-09 16:57:32
141
原创 9.1Java日期与时间
Epoch Time又称为时间戳,通常是用long表示的毫秒数long t = 1574208900123L;转换成北京时间就是2019-11-20T8:15:00.123。要获取当前时间戳可以使用System.currentTimeMillis()。Java新旧标准库一套定义在java.util这个包里面,主要包括Date、Calendar和TimeZone这几个类;一套新的API是在Java 8引入的,定义在java.time这个包里面,主要包括LocalDateTime、ZonDat
2020-07-09 10:10:34
207
原创 8.6JavaI/O流之Reader和Writer
ReaderReader和InputStream是同一个性质,InputStream是一个字节流,以byte为单位,而Reader是字符流,以char为单位。读取字符的方法也是int read(char[] c);需要注意的是Reader由于是字符流,因此可读性较高,需要更高的编码模式,在创建时需注明。FileReader:FileReader是Reader的一个子类,它可以打开文件获取Reader。public static void main(String[] args) throws IOE
2020-07-08 18:02:38
125
原创 8.5JavaI/O流之Zip
ZipInputStreamZipInputStream是一种FilterInputStream,它可以直接读取Zip包的内容。读取Zip包:try (ZipInputStream zip = new ZipInputStream(new FileInputStream(...))) { ZipEntry entry = null; while ((entry = zip.getNextEntry()) != null) { String name = entry.ge
2020-07-08 17:00:48
109
原创 8.4JavaI/O流之Filter模式
Filter(装饰者:Decorator)模式用InputStream做例子,该InputStream需要更多的功能,而更多的功能则需要新建一个InputStream的子类来继承inputStream,在此类上添加另一个功能,则需要继续继承新建,以此往复不断新建,会导致代码复杂度变大,子类太多,为解决这种问题,产生了Filter模式。InputStream file = new FileInputStream("test.gz");//确定数据源InputStream buffered = new B
2020-07-08 09:47:07
131
原创 8.2javaI/O流之InputStream
输入流(InputStream)InputStream不是一个接口,而是一个抽象类,其中最重要的方法是int read();方法:这个方法会读取输入流的下一个字节,并返回字节表示的int值。若返回-1,则表示读到末尾。FileInputStream是InputStream的一个子类,其实现了readFile()方法。在操作InputStream和OutputStream的过程中,需要及时释放不需要的资源,调用Close方法。 在读取过程中如果出现错误,会导致无法运行close方法,因此,在做IO操
2020-07-07 19:28:08
140
原创 8.1JavaI/O流之File对象
文件操作:Java提供了File对象来操作文件:File f = new File("C:\\Windows\\notepad.exe");在传入文件路径时,可以传入的是绝对路径和相对路径绝对路径:是以根目录为开头的完整路径。(window使用\作为文件分隔符,java中使用需要\\。Linux平台需要使用/作为分隔符。)相对路径:是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。// 假设当前目录是C:\DocsFile f1 = new File("sub\\javac"
2020-07-07 16:43:50
123
原创 7.9java集合之Collections
Collections:是JDK提供的工具类,位于java.util包中。(注意不是Collection,多加了个s)Collections可以用作很多地方,Collections提供的方法都是静态的:创建空集合:创建空List:List emptyList()创建空Map:Map<K, V> emptyMap()创建空Set:Set emptySet()创建单元素:创建一个元素的List:List singletonList(T o)创建一个元素的Map:Map<K
2020-07-07 11:46:43
95
原创 7.9java集合之栈(Stack)
Stack(栈)栈的特点是:后进先出(LIFO:Last In First Out)我们知道队列的两端是敞开的,而栈的一端是封死的。因此栈才可以做到后进先出,只能不断地往Stack中压入(push)元素,最后进去的必须最早弹出(pop)来。Stack实现的方法:把元素压栈:push(E);把栈顶的元素“弹出”:pop(E);取栈顶元素但不弹出:peek(E)。在java中没有Stack的接口,是由于历史原因。因此我们可以将Deque作为Stack使用。在使用时,要使用Stack的方法,
2020-07-07 11:27:24
124
原创 7.8java集合之队列
Queue(队列)队列是一种常用的集合,实现了先进先出(FIFO:First In First Out)。和list区别在于,list可以实现任意位置添加删除,而队列只能在尾部添加,首部取出。java标准库中Queue定义了几个方法:int size():获取队列长度;boolean add(E)/boolean offer(E):添加元素到队尾;E remove()/E poll():获取队首元素并从队列中删除;E element()/E peek():获取队首元素但并不从队列中删除。
2020-07-07 10:55:06
302
原创 7.7Set集合
Set集合用于存储不重复的元素,且set集合为了满足不重复都特点,需要实现equals和hashCode方法。Set提供的方法:将元素添加进Set:boolean add(E e)将元素从Set删除:boolean remove(Object e)判断是否包含元素:boolean contains(Object e)例:public class Main { public static void main(String[] args) { Set<String&
2020-07-06 11:25:49
318
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人