自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 1091 二进制矩阵中的最短路径

题目在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, 0)(即,值为 grid[0][0])C_k 位于 (N-1, N-1)(即,值为 grid[N-1][N-1])如果 C_i 位于 (r, c),则 grid[r][c

2020-09-14 10:02:41 173

原创 JDBC数据库 入门二

面向接口编程DAO模式具体的实现类创建,隐藏在工厂中,通过工厂类的get方法得到这个接口的实现类的实例工厂类返回一个具体的UserDao 的实现类对象1.给出一个配置文件,文件中给出UserDao接口的实现类名称2.加载配置文件,获取类名称,然后通过反射来创建这个类对象加载配置文件,就是键值对的文件,实现类的名称和自己的’‘xxx’’'配对加载配置文件:首先,加载一个流InputStream in = DaoFactory.class.getClassLoader().getResou

2020-09-13 12:24:09 150

原创 JDBC数据库入门一

连接数据库导jar包:驱动加载驱动类:Class.forName(“类名”);给出url,usename,password使用Drivejdbc四大参数driverClassName:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/数据库名username:用户名password:密码url:jdbc:数据库厂商:子协议自协议由厂商决定的连接数据库,得到Connection准备四大参数加载驱动类得到Connection

2020-09-12 14:13:13 289

原创 Servlet 基础二

ServletContext 概述一个项目只有一个ServletContext对象可以在N多个Servlet中获取这个唯一对象,使用它可以给多个Servlet传递数据服务器会为每个应用 创建一个ServetContext 对象ServletContext 对象的创建是在服务器启动时完成ServletContext 对象的销毁是在服务器关闭时完成ServletContext 对象的作用是在整个Web应用的动态资源之间共享数据。如何获取ServletContextSe

2020-09-12 13:18:26 160

原创 Servlet 基础一

Servlet ,每个 Servlet都是唯一的,它们能处理的请求是不同的。Servlet是JavaWeb的三大组件之一,属于动态资源。作用是处理请求,服务器会把接收到的请求交给Servlet处理Servlet中通常要:1 接收请求数据 2 处理请求 3 完成响应Servlet 需要自己来编写,每个Servlet必须实现java.servlet.Servlet接口实现Servlet的方式1.实现 javax.servlet.Serlvet 接口继承 javax.servlet.Generi

2020-09-11 12:34:20 142

原创 LeetCode 127 单词接龙

题目给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。解法一这个采用BFS来进行转换查询,一层一层的往外扩散,直到查询到最短的

2020-09-10 10:48:01 73

原创 LeetCode 37 解数独

题目编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。注意:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。解法本道题类似于八皇后问题,在填充的位置放入1~9 数字,能放入的就继续往下走继续放,如果放的数字导致后面的不能放入就进行回溯

2020-09-09 11:00:24 77

原创 MySQL 语法基础二

MySQL编码问题查看MysQL数据库编码:SHOW VARTABLES LIKE ‘CHAR%’character_set_client :MYSQL使用该编码解读客户端发过来的数据。如果客户端发回来的数据不是这个,就会出现乱码character_set_results :MYSQL会把数据转换成该编码再发送给客户端。如果客户端不使用该编码,就会出现乱码CMD默认使用GBK,需要修改变量set character_set_client = gbk;set character_set_res

2020-09-06 14:02:50 93

原创 MySQL语法基础一

数据库:面向关系 使用 二维表格来存储数据Oracle:甲骨文MySQL :甲骨文DB2:IBMSQL Server:微软关系型数据库管理系统:RDBMS即 数据库服务器仓库 + 管理员数据库表就是一个多行多列的表格表结构,对列名称列类型进行定义表记录,数据MySQL 中编码UTF8 没有-...

2020-09-06 14:02:32 147

原创 LeetCode 36 有效的数独

题目判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。思路就是遍历整个表格,看是否有重复的数字class Solution { public boolean isValidSudoku(char[][] board) { int[][] rows = new int[9][9]; in

2020-09-06 14:02:10 61

原创 字典树基本实现及特性

字典树 Trie又称单词查找树或者键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(不仅限于字符串),经常被搜索系统用于文本词频统计它的优点是:最大限度的减少无谓的字符串比较,查询效率比哈希表高。基本性质结点本身不存完整单词从根结点到某一结点,路径上经过的字符连接起来,为该结点所对应的字符串每个结点所有的子结点路劲代表的字符都不同核心思想Trie树核心思想为空间换时间利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。字典树的Java实现...

2020-08-08 13:40:49 165

原创 LeetCode 198 打家劫舍

题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,9

2020-08-05 17:24:06 78

原创 LeetCode 322 零钱兑换

题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1思路 动态规划,自底向上首先,如何去考虑动态规划,怎么将这个问题拆分为重复的子问题然后,定义dp状态方程dp[i

2020-08-04 20:07:40 84

原创 LeetCode 120 三角形最小路径和

题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。思路一 暴力搜索对于一个位置来说,它的最小路径和 就是 自身加上 它所选择俩边中的最小路径。这样可以 写出递归搜索c

2020-08-02 03:41:32 86

原创 数据库连接池

Java连接数据库时,需要构建连接,执行操作,最后释放连接。但是如果在执行操作上非常简便,那么构建连接和释放连接非常的损耗性能Connection是Java和数据库俩个平行系统的桥梁桥梁构建不易,成本很高,单次使用成本贵昂贵运用共享技术来实现数据库连接池(享元模式)– 降低系统中数据库连接Connection对象数量– 降低数据库服务器的连接响应消耗– 提高Connection获取的响应速度享元模式经典23个设计模式的一种,属于结构型模式一个系统存在大量相同的对象(由于这类对象的大量

2020-08-01 23:23:20 123

原创 JDBC 高级操作

事务数据库事务:Database Transaction作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行事务,必须满足所谓的ACID(原子性,一致性,隔离性,持久性)事务是数据库运行中的逻辑工作单位,由DBMS中事务管理子系统负责事务的处理JDBC事务关闭自动提交,实现多语句同一事务connettion.setAutoCommit(false);connection.commit();提交事务connection.rollback();回滚事务保存点机制– co

2020-08-01 00:15:43 146

原创 数据库 和JDBC基本操作

数据库DB:Database存放数据的库数据:规范,半规范,不规范数据数据安全 重要DB(文件集合,类似.dox,.doxc文件),而操纵和管理数据库的软件,用来建立,使用,和维护数据库 叫做DBMS(Database Management System)DB种类文本文件/二进制文件xls文件(表格文件)AccessMysql(免费,多平台)SQL ServerOracle/DB2SQLite(手机使用)表数据库里面最基础的一个元素表:table– 列:列,属性,

2020-07-31 22:54:08 145

原创 Java 邮件 Mail编程

邮件使用Web 邮件管理界面邮件客户端软件(Outlook/Foxmail等)邮件客户端邮件服务端– 发送邮件服务器– 接收邮件服务器主要协议(发送端口25,接收端口110)邮件中继:通过别人的邮件服务器,将你的邮件系统的送到目标地址Java Mail程序通过Java Maik的API能够联系上邮件服务器,进行邮件的收发操作– 需要邮件服务器的支持,需要知道pop服务器和smtp服务器信息Java Mail工具包javax.mail包 和jzvzx.mail.inte

2020-07-30 22:53:23 353

原创 LeetCode 1143 最长公共子序列

题目给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = "abcde", text2 = "

2020-07-29 18:13:10 104

原创 LeetCode 63 不同路径二

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?思路 动态规划和前面62题思路一样,就是需要加一个判断的条件是否有障碍物class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) {

2020-07-28 14:52:03 59

原创 LeetCode 62 不同路径

题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?思路 动态规划动态规划,寻找状态转移方程,就是递推公式。找到重复的最近子问题需要存储中间结果这个题目的话,类似斐波拉契数,自底向上的进行思考递归。当前格子到终点的路线个数,等于下面和右边格子路线个数相加这样,可以直接递归,然后很多格子是重复计算的,所以用一个二维数组,存储计算

2020-07-28 13:21:46 54

原创 Java AIO 通讯编程

AIO通讯异步非阻塞的通讯方式,就是不需要等待一方的数据操作完成,会自动执行回调函数处理的读写操作主要类– AsynchronousServerSocketChannel 服务器接收请求通道bind 绑定在某一端口 accept 接收客户端请求– AsynchronousSocketChannel Socket 通讯通道read write– CompletionHandler 异步处理类completed 操作完成后异步调用方法 failed 操作失败后异步调用方法package

2020-07-27 20:30:45 164

原创 Java NIO 编程

BIO编程传统的TCP和UDP编程通讯:Blocking I/O一方在写入或读 数据时过慢,另一方需要等待NIO编程,同步非阻塞Non-Blocking I/O提供非阻塞通讯等方式避免同步I/O通讯效率过低一个线程可以管理多个连接减少线程多的压力JDK1.4引入,1.7升级为NIO2.0(包括AIO)主要在java.nio包中主要类– Buffer 缓冲区– Channel 通道– Selector 多路选择器Selector 在这里就选择的作用,哪一个数据通道有响应

2020-07-27 20:10:09 89

原创 LeetCode 33 搜索旋转排序数组

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], targ

2020-07-26 01:59:18 79

原创 基本数据类型及转型

基本数据类型1、整数型:byte (1字节) short(2字节) int(4字节) long(8字节)2、浮点型:float(4字节) double(8字节)3、字符型:char(2字节)4、布尔型:boolean(1字节)转型boolean类型不参与自动类型转换,把范围小的数据可以直接转为 范围大的数据例如: int a = 10; double b = a;强制类型转换,把范围大的数据 放到范围小的数据中,不用标记会报错double b = 10.1;int

2020-07-24 23:49:06 276

原创 367 有效的完全平方数

题目给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。示例 1:输入:16输出:True示例 2:输入:14输出:False思路一 二分查找设置上下界,然后进行判断class Solution { public boolean isPerfectSquare(int num) { if (num == 1) return true; int l = 2, r = num;

2020-07-24 16:18:39 48

原创 LeetCode 69 X的平方根

题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路一,二分查找使用二分查找,首先明白二分查找的条件目标函数需要单调性有确定是上下界可以通过索引访问这个题目可以在 1~X的范围中去寻找这个x的平方根。代码来官方题解

2020-07-24 14:56:13 52

原创 LeetCode 55 跳跃游戏

题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。思路一设置一个

2020-07-20 01:22:15 53

原创 LeetCode 122买卖股票的最佳时机Ⅱ

题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(

2020-07-19 23:54:39 64

原创 Java HTTP编程

网页访问网页是特殊

2020-07-19 14:56:58 393

原创 LeetCode 455 分发饼干

题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。思路分发饼干 想法就是每一次都给孩子最小合适的饼干。太小的饼干不满足孩子胃口

2020-07-18 20:19:28 88

原创 JAVA 实现 UDP协议和TCP协议

UDP协议UDP(User Datagram Protocol)用户数据报协议,面向无连接协议不保证可靠的数据传输速度快,可在较差网络下使用计算机通讯:数据从一个IP的port出发,运输到另外一个IP的port上UDP:无连接无状态的通讯协议– 发送方发送消息,如果接收方刚好在目的地,就可以接受。如果不在,发送的消息就丢失了– 发送方也无法得知是否消息发送成功– UDP的好处就是简单,节省,经济JAVA中实现UDP协议DatagramSocket类:通讯的数据

2020-07-16 23:46:28 209

原创 LeetCode 200 岛屿数量

题目你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出: 1示例 2:输入:[['1','1','0','0','0'],['

2020-07-16 19:22:26 66

原创 LeetCode 433 最小基因变化

题目一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 “A”, “C”, “G”, "T"中的任意一个。假设我们要调查一个基因序列的变化。一次基因变化意味着这个基因序列中的一个字符发生了变化。例如,基因序列由"AACCGGTT" 变化至 “AACCGGTA” 即发生了一次基因变化。与此同时,每一次基因变化的结果,都需要是一个合法的基因串,即该结果属于一个基因库。现在给定3个参数 — start, end, bank,分别代表起始基因序列,目标基因序列及基因库,请找出能够使起始基因序列

2020-07-16 00:51:19 191

原创 LeetCode 51 N皇后

方法1:回溯在建立算法之前,我们来考虑两个有用的细节。一行只可能有一个皇后且一列也只可能有一个皇后。这意味着没有必要再棋盘上考虑所有的方格。只需要按列循环即可。对于所有的主对角线有 行号 + 列号 = 常数,对于所有的次对角线有 行号 - 列号 = 常数.这可以让我们标记已经在攻击范围下的对角线并且检查一个方格 (行号, 列号) 是否处在攻击位置。现在已经可以写回溯函数 backtrack(row = 0).从第一个 row = 0 开始.循环列并且试图在每个 column 中放置皇后.

2020-07-13 00:48:37 67

原创 Java多线程应用之定时任务执行

之前使用Thread/Executor/Fork-Join的多线程三种方式前一种是立刻执行的,后俩种是框架来进行调度,我们不了解,需要一种定时执行多线程的方式。定时执行固定某一个时间点一级运行以某一周期简单定时器机制– 设置计划任务,也就是在指定的时间开始执行某一任务– TimerTask 用来封装任务 ,也是继承与Runnable接口– Timer类 定时器public class TimerTest { public static void main(String[] arg

2020-07-12 00:36:59 2351 1

原创 Java并发协作控制之相关API

线程协作Thread/Executor/Fork-Join– 线程启动,运行,结束– 线程之前缺少协作synchronized 同步– 限定只能一个线程进入关键区– 简单粗暴,性能损失大LockLock实现同步的效果– 实现更复杂的临界区结构– tryLock方法可以预判锁是否空闲– 允许分离读写操作,多个读,一个写– 性能更好ReentrantLock 类,可重入的互斥锁ReentrantReadWriteLock 类,可重入的读写锁lock和unlock函数奶茶店

2020-07-11 23:57:20 92

原创 多线程中Thread中wait(),sleep(),join()方法

join()这里join用法,在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。如果写入参数,就是等待几毫秒。参数是0的话就是一直等待,知道唤醒,等价于没有参数。join的原理,看源码public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); l

2020-07-11 22:43:01 882

原创 Java 并发数据结构

并发数据结构常用的数据结构是线程不安全的– ArrayList,HashMap,HashSet 非同步的– 多个线程同时读写这些数据结构时,可能会抛出异常或者数据错误传统的Vector,Hashtable等同步的集合性能过差并发的数据结构:数据添加或者删除– 阻塞式集合:当集合为空或者满时,等待– 非阻塞式集合:放集合为空或者满时,不等待,返回null或异常ListVector 同步安全,写多读少ArrayList 不安全Collections.synchronizedList

2020-07-11 21:07:02 300

原创 LeetCode 17 电话号码的字母组合

题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].思路一 递归+回溯将数字对应的字符串,都存储在hash表中第一个数字时,枚举它所有的字符第二个数字,继续在第一个数字的枚举上 继续枚举,形成字符串,一直到数字遍历结束class Solution { pub

2020-07-07 18:58:03 59

空空如也

空空如也

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

TA关注的人

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