自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于JDK动态代理

在学习Spring的AOP部分时,发现我对代理模式尤其是动态代理的了解太少,为了更加透彻的理解写的笔记,如果有写错的地方或者有更好的理解方式欢迎指正在理解JDK动态代理之前需要先理解一下Java反射JDK动态代理我们用一个例子(房屋出租)来理解动态代理://被代理类public class Host implements Rent{ @Override public void rent() { System.out.println("租房!"); }}.

2021-12-11 12:54:51 617

原创 关于Java反射

1. Java反射定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制通过反射机制可以将Java类中的各个元素(构造方法、成员变量、成员方法;包等)解剖为一个一个的对象要想解剖一个类,必须先要获取到该类的字节码文件对象(C.

2021-12-10 14:36:40 682

原创 计算机网络自顶向下方法 【第二章 应用层】

目录2.1 应用层协议原理2.1.1 网络应用程序体系结构2.1.2 进程通信2.1.3 可供应用程序使用的运输服务2.1.4 因特网提供的运输服务2.1.5 应用层协议2.2 Web和HTTP2.2.1 HTTP概况2.2.2 非持续连接和持续连接2.2.3 HTTP报文格式2.2.4 用户与服务器的交互:cookie2.2.5 Web缓存2.3 因特网中的电子邮件2.3.1 SMTP2.3.2 与HTTP对比2.3.4 邮件访问协议2.4 DNS:因特网的目录服务2.4.1 DNS提供的服务2.4.2

2021-12-08 15:31:13 722 3

原创 计算机网络自顶向下方法 【第一章 计算机网络及因特网】

计算机网络黑皮书第一章个人笔记

2021-12-08 14:43:31 2279

原创 《高性能MySQL》笔记【第一章】

第一章 MySQL框架与历史1.1MySQL逻辑框架1.1.1 连接管理与安全性1.1.2 优化与执行1.2 并发控制1.2.1 读写锁1.2.2 锁粒度1.3 事务1.3.1 隔离级别1.3.2 死锁1.3.3 事务日志1.3.4 MySQL中的事务1.4 多版本并发控制MVCC1.1MySQL逻辑框架MySQL最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离这种设计模式导致可以在使用时根据需求来选择数据存储的方式MySQL的逻辑架构图如

2021-11-27 19:44:40 772

原创 关于递归和Master公式

关于递归和Master公式递归定义:程序调用自身的编程技巧称为递归递归的使用方法技巧已经被讲烂了这里就不多赘述,想讲讲Master公式Master公式定义:Master公式又称主定理,是用来解决由分治法得到的递归问题时间复杂度的公式T(n)=aT(nb)+O(nd)T(n)=aT(\frac{n}{b})+O(n^d)T(n)=aT(bn​)+O(nd)其表示的意义:n表示问题的规模a表示递归的次数也就是生成的子问题数,每一层小递归要进行多少次b表示每次递归是原来的1/b之

2021-11-26 13:53:53 369

原创 LeetCode 260.只出现一次的数|||【Java】

目录1. 题目2.思路与代码1. 题目给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nums = [-1,0]输出:[-1,0]示例 3:输入:nums = [0,1]输出:[1,0]2.思路与代码这道题需要运用到异或^异或的性质:相同则0不同则1恒

2021-11-19 19:02:33 476

原创 LeetCode 55.跳跃游戏【Java】

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

2021-11-14 16:40:40 206

原创 LeetCode 213.打家劫舍||【Java】

目录1.题目2.思路与代码1.题目你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3

2021-11-13 16:17:13 67

原创 LeetCode 509&756&1137.动态规划三道题【Java】

目录1. 斐波那契数列1. 题目2. 代码2.使用最小花费爬楼梯1.题目2.代码3. 第 N 个泰波那契数1.题目2.代码这三道题的解法大同小异,直接套用动态规划解题思路即可动态规划解题方法点这里1. 斐波那契数列1. 题目斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计

2021-11-11 20:40:49 46

原创 动态规划【Java】

参考文章:https://cloud.tencent.com/developer/article/1817113关于动态规划动态规划算法的核心就是记住已经解决过的子问题的解。动态规划有几个典型特征:最优子结构、状态转移方程、边界、重叠子问题。什么样的问题可以考虑使用动态规划解决呢?如果一个问题,可以把所有可能的答案穷举出来,并且穷举出来后,发现存在重叠子问题,就可以考虑使用动态规划。动态规划问题的解题思路:穷举分析确定边界找出规律,确定最优子结构写出状态转移方程动态规.

2021-11-11 10:34:48 410

原创 LeetCode 122. 买卖股票的最 佳时机2【Java】

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

2021-11-10 23:12:50 90

原创 LeetCode 70.爬楼梯【Java】

目录1.题目2.思路和代码1.题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。4. 1 阶 + 1 阶 + 1 阶5. 1 阶 + 2 阶6. 2 阶 + 1 阶2.思路和代码经典动态规划问题:f

2021-11-10 22:42:22 388

原创 LeetCode 198.打家劫舍【Java】

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

2021-11-10 22:36:23 81

原创 LeetCode 237.删除链表中的结点【Java】

目录1.题目2.思路和代码1.题目请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。示例 1输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9示例 2:输入:head = [4,5,1,9], node = 1输

2021-11-08 11:06:03 99

原创 LeetCode 125.验证回文串【Java】

目录1.题目2.思路和代码1.题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 <= s.length <= 2

2021-11-07 12:47:27 95

原创 LeetCode 242.有效的字母异位词【Java】

目录1.题目2.思路和代码1.题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false提示:1 <= s.length, t.length <= 5 * 104s 和 t 仅包含小写字母

2021-11-06 11:39:05 67

原创 LeetCode 387.字符串中的第一个唯一字符【Java】

目录1.题目2.思路和代码1.题目给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = "leetcode"返回 0s = "loveleetcode"返回 22.思路和代码两次遍历,第一次遍历计算字符出现的次数,第二次遍历找出出现次数为一的那个字符。class Solution { public int firstUniqChar(String s) { int[] tmp = new int[26];//用来记

2021-11-06 11:04:48 83

原创 LeetCode 344.反转字符串【Java】

目录1.题目2.思路和代码1.题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]提示:1 <=

2021-11-06 10:40:29 70

原创 LeetCode 36.有效的数独【Java】

目录1.题目2.思路和代码1.题目请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。数独部分空格内已填入了数字,空白格用 '.' 表示。输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."

2021-11-03 11:52:40 87

原创 LeetCode 496.下一个更大的元素【Java】

j

2021-11-02 15:14:35 48

原创 LeetCode 389.找不同【Java】

目录1.题目2.思路与代码1.题目给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。示例 2:输入:s = "", t = "y"输出:"y"示例 3:输入:s = "a", t = "aa"输出:"a"示例 4:输入:s = "ae", t = "aea"输出:"a"

2021-11-02 15:12:21 182

原创 LeetCode 485.最大连续1的个数【Java】

https://leetcode-cn.com/problems/max-consecutive-ones/

2021-11-01 21:52:23 62

原创 Java个人基础笔记【一】

目录Java的特点Java的特点Java是面向对象语言(oop)Java语言是健壮的。 Java的强类型机制,异常处理,垃圾的自动收集Java是跨平台的(编译好的.class文件可以在多个操作系统上运行,根本原因是JVM)Java语言是解释型的(解释性语言有js,PHP,Java,编译性语言有c/c++)区别是解释型语言编译后的代码不能直接被机器执行,需要解释器来执行,编译性语言编译后的代码可以被机器执行)...

2021-10-30 20:09:47 42

原创 LeetCode 495.提莫攻击【Java】

目录1.题目2.思路和代码1.题目在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。示例1:输入: [1,4], 2输出: 4原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。第 4 秒初,提莫再次攻击艾希,使得艾希

2021-10-30 12:45:49 71

原创 LeetCode 367. 有效的完全平方数【Java】

目录1.题目2.思路和代码1.题目给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。不要使用任何内置的库函数,如 sqrt 。示例 1:输入:num = 16输出:true示例 2:输入:num = 14输出:false2.思路和代码这是一道挺简单的题目,直接解出来也对使用二分法也可以,但是就会超时。。。二分法:如果num小于2则返回trueleft指向2,right指向num/2//为什么right指

2021-10-30 12:06:04 120

原创 LeetCode 453.最小操作数次数使数组元素相等【Java】

目录1.题目2.思路与题解1.题目给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 示例 1:输入:nums = [1,2,3]输出:3解释:只需要3次操作(注意每次操作会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]示例 2:输入:nums = [1,1,1]输出:0提示:n == nums.length1 <=

2021-10-29 13:30:47 3397

原创 LeetCode 350.两个数组的交集||【Java】

目录1. 题目2.思路与代码1. 题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。2.思路与代码基本代码和349题一样,与349题不同的一点就是349题会去除重复的元素

2021-10-29 12:27:39 53

原创 LeetCode 414.第三大的数【Java】

目录1.题目2.思路的代码1.题目给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。提示:

2021-10-28 12:27:22 135

原创 LeetCode 349. 两个数组的交集【Java】

目录1.题目2.思路和代码1.题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4] 说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。通过次数220,713提交次数299,0252.思路和代码先排序,...

2021-10-28 12:12:49 83

原创 LeetCode 303. 区域和检索 - 数组不可变【Java】

目录1.题目2.思路和代码1.题目给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j])) 示例:输入:["

2021-10-28 10:18:58 53

原创 LeetCode 283.移动零【Java】

目录1. 题目2. 思路和代码1. 题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。2. 思路和代码方法一: 遍历设置一个指针 j 用来保存非零数的排序后的位置,遍历数组,如果找到了非零数则将非零数移到 j 的位置,之后j++ , 最后再将数组下标 j 到 nums.length 填零即可clas

2021-10-27 09:14:14 83

原创 LeetCode 286.丢失的数字【Java】

目录1.题目2.思路与代码1.题目给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数.示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现

2021-10-27 08:39:44 149

原创 LeetCode 169. 多数元素【Java】

目录1. 题目2. 思路和代码1. 题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。2. 思路和代码方法一:根据多数元素的概念可知,多数元素在排序后其中一个一定在nums.lengt

2021-10-26 17:41:06 49

原创 LeetCode 167. 两数之和 II - 输入有序数组【Java】

目录1. 题目2. 思路和代码1. 题目给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。 示例 1:输入:

2021-10-26 14:10:32 96

原创 LeetCode 121.买股票的最佳时机【Java】

目录1. 题目2. 代码1. 题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-

2021-10-25 21:17:56 54

原创 LeetCode 136.只出现一次的数字【Java】

目录1. 题目2. 思路与代码1. 题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?2. 思路与代码题目说序列的元素除了一个元素只有一个以外,其余的元素都有两个,我们可以利用这个点进行思考方法一: 最直接的方法;将数组排序,两个两个元素进行对比,如果相同则跳过

2021-10-25 17:06:31 140

原创 LeetCode 53.最大自序和【Java】

目录1. 题目2. 思路与代码1. 题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000

2021-10-21 19:41:23 70

原创 LeetCode 1.两数之和【Java】

目录1. 题目2. 思路与代码1. 题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6

2021-10-21 19:01:59 32

原创 LeetCode 88.合并两个有序数组【Java】

目录1. 题目2.思路和代码1. 题目给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例

2021-10-21 11:16:55 67

空空如也

空空如也

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

TA关注的人

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