自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 剑指 Offer 68 - II. 二叉树的最近公共祖先

class Solution { /** * 二叉树的最近公共祖先 * 思路: * 三种情况: * 1、p q 一个在左子树 一个在右子树 那么当前节点即是最近公共祖先 * 2、p q 都在左子树 * 3、p q 都在右子树 * @param root * @param p * @param q * @return */ public TreeNode...

2021-11-24 11:35:31 382

原创 剑指 Offer 67. 把字符串转换成整数

class Solution { public int strToInt(String str) { List<Character> list = new ArrayList<>(); boolean flag = true;//1 + 0 - boolean start = false;//截取已经开始 for(int i=0;i<str.length();i++){ ...

2021-11-24 10:49:04 159

原创 最长和谐子序列

class Solution { public int findLHS(int[] nums) { Arrays.sort(nums); int begin = 0; int res = 0; for (int end = 0; end < nums.length; end++) { while (nums[end] - nums[begin] > 1) { ...

2021-11-20 10:58:13 257

原创 面试题50. 第一个只出现一次的字符(哈希表 / 有序哈希表,清晰图解)

class Solution { public char firstUniqChar(String s) { Map<Character, Boolean> dic = new LinkedHashMap<>(); char[] sc = s.toCharArray(); for(char c : sc) dic.put(c, !dic.containsKey(c)); for...

2021-11-18 11:44:21 285

原创 剑指 Offer 49. 丑数

方法一:最小堆初始化一个空堆,先将最小丑数1放入优先队列(堆顶元素最小),取出堆顶元素x(最小),将2x,3x,5x压入堆,使用set进行去重操作,2x,3x,5x在set中不存在时,将值压入priorityQueue,和set,第n次取的是第n个丑数。class Solution { public int nthUglyNumber(int n) { PriorityQueue<Long> heap = new PriorityQueue<Long&gt

2021-11-18 10:24:47 85

原创 剑指 Offer 38. 字符串的排列(回溯法,清晰图解)Krahets发布于 2020-03-30192.3k

class Solution { List<String> res = new LinkedList<>(); char[] c; public String[] permutation(String s) { c = s.toCharArray(); dfs(0); return res.toArray(new String[res.size()]); } void df...

2021-11-17 15:04:43 172

原创 剑指 Offer 36. 二叉搜索树与双向链表(中序遍历,清晰图解)

class Solution { private Node head ; private Node pre ; public Node treeToDoublyList(Node root) { if(root==null) return null; pre = null; dfs(root); head.left = pre; pre.right = head; ...

2021-11-14 17:27:58 241

原创 剑指 Offer 35. 复杂链表的复制(哈希表 / 拼接与拆分,清晰图解)

class Solution {public: Node* copyRandomList(Node* head) { Node* cur = head; Node* dum = new Node(0), *pre = dum; while(cur != nullptr) { Node* node = new Node(cur->val); // 复制节点 cur pre->...

2021-11-13 12:03:07 335

原创 剑指 Offer 24. 反转链表(迭代 / 递归,清晰图解)

class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head, pre = null; while(cur != null) { ListNode tmp = cur.next; // 暂存后继节点 cur.next cur.next = pre; // 修改 next 引用指向 ...

2021-11-07 16:55:53 102

原创 剑指 Offer 17. 打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。class Solution { public int[] printNumbers(int n) { int MAX_VALUE = 0; for(int i=0;i<n;i++){ MAX_VALUE = MAX_VALUE*10+9; } int[] resu.

2021-11-06 15:02:48 76

转载 面试题14- II. 剪绳子 II(数学推导 / 贪心思想 + 快速幂求余,清晰图解)

力扣https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/solution/mian-shi-ti-14-ii-jian-sheng-zi-iitan-xin-er-fen-f/# 求 (x^a) % p —— 循环求余法def remainder(x, a, p): rem = 1 for _ in range(a): rem = (rem * x) % p return rem...

2021-11-06 10:50:48 129

原创 剑指 Offer II 004. 只出现一次的数字(有限状态自动机 + 位运算,清晰图解)

解题思路:如下图所示,考虑数字的二进制形式,对于出现三次的数字,各 二进制位 出现的次数都是 333 的倍数。因此,统计所有数字的各二进制位中 1 的出现次数,并对 3 求余,结果则为只出现一次的数字。方法一:有限状态自动机各二进制位的 位运算规则相同 ,因此只需考虑一位即可。如下图所示,对于所有数字中的某二进制位 1的个数,存在 3 种状态,即对 3 余数为 0,1,2。 若输入二进制位 1 ,则状态按照以下顺序转换; 若输入二进制位 0,则状态不变。...

2021-11-06 10:41:48 169

原创 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数

class Solution { public int[] countBits(int n) { int[] bits = new int[n + 1]; for (int i = 0; i <= n; i++) { bits[i] = countOnes(i); } return bits; } public int countOnes(int x) { int...

2021-11-03 17:12:38 90

转载 深入理解java反射原理

反射是Java的一个特性,这个特性也使得他给广大第三方框架和开发者很大的想想空间。通过反射,Java可以动态加载未知的外部配置对象,临时生成字节码进行加载使用,从而使代码灵活,可以极大地提高应用的拓展性实现:主要看两个方法的实现:public class HelloReflect { public static void main(String[] args) { try { // 1. 使用外部配置的实现,进行动态加载类

2021-10-19 16:37:39 276

原创 java反射的原理,作用

什么是反射,反射原理Java反射的原理:java类的执行需要经历以下过程:编译--连接---初始化编译:.java文件编译后生成.class字节码文件加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对应的java.lang.Class对象实例连接:三步验证:格式(class文件规范) 语义(final类是否有子类) 操作 准备:静态变量赋初值和内存空间,final修饰...

2021-10-19 14:40:28 521

原创 第三章 Spring Boot进阶,社区核心功能开发

1、过滤敏感词如何使用数据结构,建立自己敏感词过滤算法 ,主要使用前缀树,用空间换取时间。开发一个工具类:敏感词过滤器,定义前缀树,根据敏感词初始化前缀树,编写敏感词过滤方法。前缀树:根节点不包含任何字符空;其他节点唯一一个字符;从根节点到某个节点经过的路径对应一个字符串;每个节点的子节点不唯一。要到叶子节点才是敏感词--用boolean标记。需要三个指针:p1指向root,p2指向字符串第一个字符,第三个指向第一个(默认)。指针p2和p3分别指向敏感词的开头和.

2021-09-20 10:23:42 234

原创 第2章 Spring Boot实践,开发社区登录模块

.1发送邮件登陆注册需要向用户发送邮件,验证。SpringBoot集成了发送邮件的功能。这个方便多了模版引擎帮助发送邮件携带连接等功能,HTML邮件开启POP3/SMTP功能:导入Spring mail jar包--Spring Boot Mail Starter配置邮箱参数-访问连接,协议,换邮箱改配置,不写死。#MailPropertiesspring.mail.host=smtp.qq.comspring.mail.password=88888...

2021-09-17 10:51:13 846

原创 项目调试小技巧

通过状态响应码;通过断点;通过日志通过状态响应码:HTTP 响应代码 - HTTP | MDN302--3开头一般和重定向有关浏览器向服务器发送请求,浏览器响应一个302状态吗,同时包含一个重定向地址,浏览器重新向新地址发出请求。重定向两次请求是独立的,注意和转发的区别。注册和登陆时的跳转,可以降低各个功能的耦合度。404 url错了打断点 --服务端和客户端spring boot 支持很多日志调试功能Logback Home ----...

2021-09-16 10:42:36 164

原创 347. 前 K 个高频元素

class Solution { public int[] topKFrequent(int[] nums, int k) { HashMap<Integer,Integer> map = new HashMap<>();//数--频率 for(int i=0;i<nums.length;i++){ Integer count = map.get(nums[i]); if(count==.

2021-09-15 14:52:10 81

原创 18. 四数之和

class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { Arrays.sort(nums); List<List<Integer>> res = new ArrayList<>(); for(int i=0;i<=nums.length-1;i++){ //这...

2021-09-15 09:54:48 76

原创 15. 三数之和

解题思路: 暴力法搜索为 O(N3) 时间复杂度,可通过双指针动态消去无效解来优化效率。 双指针法铺垫: 先将给定 nums 排序,复杂度为 O(NlogN)。 双指针法思路: 固定 3 个指针中最左(最小)数字的指针 k,双指针 i,j 分设在数组索引 (k,len(nums))(k, len(nums))(k,len(nums)) 两端,通过双指针交替向中间移动,记录对于每个固定指针 k 的所有满足 nums[k] + nums[i] + nums[j] == 0 的...

2021-09-15 09:21:01 77

原创 383. 赎金信

ransomNote中的字符一定在magazine中,如果不在一定false;magazine中的某个字符只能用一次,但是可以有重复;遍历magazine,建立一个hashtable,(数组),位置是对应hash值,值是出现次数。遍历ransomNote,如果(>0)在hashtable中,对应值减一,如果不在(<=0)false;遍历万都在就是true。class Solution { public boolean canConstruct(String r...

2021-09-13 17:17:32 80

原创 454. 四数相加 II

// 本题解题步骤: // 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。 // 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。 // 定义int变量count,用来统计a+b+c+d = 0 出现的次数。 // 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。 // 最后返回统计值 co...

2021-09-13 16:57:16 74

原创 版本控制及git使用

Git简介:上传备份,记录自己上传的每个版本,方便恢复之前版本。方便团队合作,通过版本的控制工具共享代码。Git的安装预配置:Git 教程 | 菜鸟教程Git常用命令:代码提交至本地仓库代码上传至远程仓库IDEA集成Git...

2021-09-13 16:02:24 100

原创 初始SpringBoot,开发社区首页

1.1课程介绍课程目标:对框架的深度理解,前提是要应用。灵活应变。项目介绍:牛客网的的讨论功能,讨论社区。JavaWeb重点在服务端,不在前端页面。前端熟悉Html常用标签,CSS ,js首页:帖子列表,发帖,敏感词过滤---重点,算法登陆,查看帖子内容,回帖,权限控制,对别人的回复进行评论登陆,发邮件,连接,验证码,账号密码判断,登陆查看个人主页,查看关注,被关注,曾经发帖,点击关注。重点考虑性能的问题,如何不让服务器挂掉!!!私信,回复私信消息..

2021-09-13 13:55:46 249

原创 剑指 Offer 48. 最长不含重复字符的子字符串

class Solution { public int lengthOfLongestSubstring(String s) { if (s == null || s.length() <= 0) { return 0; } int leftIndex = -1; int result = 0; Map<Character, Integer> leftIndexMap = n.

2021-09-12 09:37:36 74

原创 82. 删除排序链表中的重复元素 II

// 具体地,我们从指针 cur 指向链表的哑节点,随后开始对链表进行遍历。如果当前 cur.next与 cur.next.nextcur.next.next 对应的元素相同,那么我们就需要将 cur.next以及所有后面拥有相同元素值的链表节点全部删除。我们记下这个元素值 x,随后不断将 cur.next 从链表中移除,直到 cur.next为空节点或者其元素值不等于 x为止。此时,我们将链表中所有元素值为 x 的节点全部删除。// 如果当前 cur.next 与 cur.next.nex...

2021-09-12 08:16:20 185

原创 24. 两两交换链表中的节点

使用迭代法:如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。用 head 表示原始链表的头节点,新的链表的第二个节点,用 newHead 表示新的链表的头节点,原始链表的第二个节点,则原始链表中的其余节点的头节点是 newHead.next。令 head.next = s...

2021-09-08 15:06:32 199

原创 JVM的垃圾回收GC

1、如何判断对象可以回收2、垃圾回收算法3、分代垃圾回收4、垃圾回收器5、垃圾回收调优三、垃圾回收1、如果判断对象可以回收1)引用计数法当一个对象被引用时,就当引用对象的值加一,当值为 0 时,就表示该对象不被引用,可以被垃圾收集器回收。这个引用计数法听起来不错,但是有一个弊端,如下图所示,循环引用时,两个对象的计数都为1,导致两个对象都无法被释放。2)可达性分析算法 MAT工具--可视化 JVM 中的垃圾回收器通过可达性分析来探索所有存活的对象 ...

2021-09-05 17:14:51 483 3

原创 JVM内存

https://blog.csdn.net/weixin_50280576/article/details/113742011一、前言1、什么是 JVM ?1)定义Java Virtual Machine ,Java 程序的运行环境(Java 二进制字节码的运行环境)。2)好处 *一次编译,处处执行(跨平台、多操作系统,屏蔽了字节码和操作系统,对外提供一致的运行环境,解释) 动的内存管理,垃圾回收机制(减少程序员负担,减少出错概率) 数组下标越界检查(抛异常,C要自己干,容...

2021-09-04 14:31:50 204

原创 八大排序算法

插入排序基本思想:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。 代码: public static void insertionSort(int[] array){ int tmp; for(int i=1;i<array.length;i++){ t

2021-09-03 09:38:26 111

原创 450. 删除二叉搜索树中的节点

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) {...

2021-09-02 21:54:29 65

原创 236. 二叉树的最近公共祖先(DFS ,清晰图解)235. 二叉搜索树的最近公共祖先

//后续遍历,自带回朔,从下倒上class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { //从root向下递归,如果遇到根节点或者p,q就返回 if(root == null || root == p || q == root) return root; // 在ro...

2021-09-02 17:30:28 192

转载 Java HashMap的死循环

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infinite Loop”可以看到很多人都在说这个事)所以,觉得这个是个普遍问题,需要写篇疫苗文章说一下这个事,并且给大家看看一个完美

2021-09-02 09:13:54 311

原创 98. 验证二叉搜索树

//迭代中比较class Solution { long pre = Long.MIN_VALUE; public boolean isValidBST(TreeNode root) { if(root==null) return true;//查找越过根节点 boolean left = isValidBST(root.left); if(root.val<=pre) return false; else pr...

2021-09-02 09:11:50 121

原创 617合并二叉树

使用层次遍历// class Solution {// public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {// if(root1 == null && root2 == null) return null;// if(root1!=null&&root2==null) return root1;// if(root2!=null&a...

2021-09-01 14:44:18 70

原创 112. 路径总和

class Solution { public boolean hasPathSum(TreeNode root, int targetSum){ if(root==null) return false; if(root.left==null&&root.right==null && 0==targetSum-root.val) return true; if(root.left==null&&ro...

2021-09-01 10:09:06 83

原创 257. 二叉树的所有路径

节点定义:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode ...

2021-08-30 16:34:41 102

原创 110.平衡二叉树

//前序遍历classSolution{publicbooleanisBalanced(TreeNoderoot){if(root==null)returntrue;elseif(Math.abs(getDeep(root.left)-getDeep(root.right))>1)returnfalse;returnisBalanced(root.left)&&isBala...

2021-08-30 15:11:12 72

清华郑莉《C++程序设计》程序示例.zip

本文件为清华大学郑莉老师在C++程序设计第四版教材的案例代码

2019-06-01

空空如也

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

TA关注的人

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