- 博客(127)
- 收藏
- 关注
原创 Java数据结构与算法实现
文章目录1.数据结构1.1 线性表1.1.1线性表的顺序存储与实现1.1.1线性表的链式存储与实现1.2 栈1.2.1 栈的顺序存储实现1.2.2 栈的链式存储实现1.3 队列1.3.1 队列的顺序存储实现1.3.2 队列的链式存储实现1.4 树1.5 图1.5.1 邻接矩阵存储结构1.5.2 邻接表存储结构2.算法2.1 查找2.1.1 顺序查找与二分法查找2.1.2 哈希表2.1.3 二叉查找...
2020-04-04 13:48:26 435
原创 学校论坛爬虫
功能实现:对北邮人论坛所有版块进行关键词搜索,将帖子名称及链接打印出来。'''实现的功能:BYR 全部讨论区 超级搜索作者:莹时间:2019.11.132019年11月13日20:29:03复习了一下爬虫简介:模拟了论坛的登录,所有版块对关键词的搜索,附带搜索结果网址(手机可直接打开不用登录,PC端需登录)并在查询结果有多页时实现多页爬取(最多5页,可自行设置)。'''doc ...
2020-03-21 12:03:12 671
原创 JAVA实现简易计算器
简易计算器,可实现任意长度带括号带优先级的 ‘加减乘除幂’ 运算还未加入报错机制,需要求表达式书写正确,不能存在左右括号数目不等或右括号前没有数字或除数为0等情况/* 科学计算器,可实现任意长度带括号带优先级的 '加减乘除幂' 运算 还未加入报错机制,需要求表达式书写正确,不能存在左右括号数目不等或右括号前没有数字或除数为0等情况 */import java.util.Ha...
2020-02-29 13:37:59 277
原创 自己手写SpringMVC
参考链接:https://www.jianshu.com/p/91a2d0a1e45ahttps://blog.csdn.net/baidu_24545901/article/details/79080696https://www.jianshu.com/p/396ba4791b7b一、SpringMVC是什么M 代表 模型(Model)模型是什么呢? 模型就是数据,就是 dao,be...
2020-01-18 17:01:00 215
原创 算法之动态规划
动态规划是一种解决最优化、搜索和计数问题的通用技术。将问题分解成多个小问题,存储它们的解,通过将其结合在一起,最终得到原始问题的解决方案。
2022-09-05 21:31:09 225
原创 剑指Offer刷题笔记 17
题目:打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]答案:陷阱:n过大时是大数问题,不能简单用int或者long数据输出。解决方法:通过字符数组char[]来进行输出数字。方法一:在字符串表达的数字上模拟加...
2020-04-06 12:57:53 118
原创 IDEA读Spring源码环境搭建
参考链接:Spring源码——IDEA读Spring源码环境搭建1.下载Spring源码包下载地址:https://github.com/spring-projects/spring-framework2.预编译进入 spring-framework 文件夹下,打开cmd,输入 gradlew :spring-oxm:compileTestJava 进行编译。3.下载安装Gradle...
2020-04-03 19:03:10 327
原创 剑指Offer刷题笔记 58
题目:反转单词顺序 I答案将字符串用trim函数去掉头尾空格后,用split函数以空格进行拆分。“ aaa bbb ccc”拆分结果为:[“aaa”,"","","","",“bbb”,"","",“ccc”].从后向前遍历数组,将“”忽略,将每个单词后面加一个“ ”,最后一个单词不加。class Solution { public String reverse...
2020-03-16 12:07:37 106
原创 剑指Offer刷题笔记 56(涉及到位运算)
题目:数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]答案:首先考虑只有一个数字...
2020-03-15 12:22:06 126
原创 剑指Offer刷题笔记 46(涉及到递归、动态规划)
题目:把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mc...
2020-03-12 13:02:13 127
原创 Java垃圾回收算法、垃圾收集器、JVM调优
参考链接:https://blog.csdn.net/lovexiaoqiqi/article/details/81737213https://www.cnblogs.com/E-star/p/5556188.htmlJVM垃圾回收(强推)Java虚拟机垃圾回收(三)名词解释:GC:垃圾收集器Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全...
2020-03-09 00:40:57 170
原创 剑指Offer刷题笔记 43
题目:1~n整数中1出现的次数输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6限制:1 <= n < 2^31答案:参考链接:Java100%附思路说明以n = 54321为例:求...
2020-03-08 14:25:13 121
原创 Java 可重入锁
可重入锁:如果某个线程试图获取一个已经由它自己持有的锁时,这个请求会立刻成功,并且会将这个锁的计数值加1,而当线程退出同步代码块时,计数器将会递减,当计数值为0时,释放锁。如果没有可重入锁的支持,在第二次企图获得锁时会进入死锁状态。通俗来说:当线程请求一个由其它线程持有的对象锁时,该线程会阻塞,而当线程请求由自己持有的对象锁时,如果该锁是重入锁,请求就会成功,否则阻塞。可重入锁举例:cl...
2020-03-06 20:05:29 158
原创 剑指Offer刷题笔记 14(涉及到动态规划、贪心算法)
题目:剪绳子答案:1.动态规划f(n) = max(f(i),f(n-i))class Solution { public int cuttingRope(int n) { if(n < 2) return 0; if(n == 2) return 1; if(n == 3) return 2; int[] ...
2020-03-06 14:27:55 153
原创 剑指Offer刷题笔记 13(涉及到BFS、DFS)
题目:机器人的运动范围答案:参考链接:BFS+DFS矩阵路径的求解方法可以归结为图或树的遍历/搜索方法,而图的通用搜索算法就是BFS(广度优先搜索)和DFS(优先搜索)。1.深度优先算法DFS遍历节点时,满足本题条件则计数符加1,并设置该节点标志为true,同时判断该节点的子节点是否也满足本题条件,进行递归操作。class Solution { public int movi...
2020-03-06 12:46:07 262
原创 LeetCode刷题笔记 300(涉及到动态规划)
题目:最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(nlogn) 吗?答案...
2020-03-04 15:55:01 140
原创 LeetCode刷题笔记 295 / 剑指Offer 41(涉及到大小顶堆)
题目:数据流的中位数答案:参考链接:暴力法+二分查找+手动实现大小堆1.排序每次新进来一个数,都把它与已存的数进行排序。可以选择插入排序,将数字插入到已排好序的序列中,并保持整个序列的排序状态。可以通过二分搜索,查找到正确位置,然后将元素插入到正确位置。2.大顶堆+小顶堆维护两个堆:用于存储输入数字中较小一半的大顶堆 lo用于存储输入数字的较大一半的小顶堆 hi需要保证这 2...
2020-03-03 15:34:39 195
原创 LeetCode刷题笔记 287
题目:寻找重复数给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 ...
2020-03-03 11:53:27 213
原创 LeetCode刷题笔记 283
题目:移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。答案:参考链接:动画演示 移动零1.双指针 两次遍历从前往后遍历两次:第一次:用另一个指针j记录非零元素的个数,只要遇到非零的数字就赋值...
2020-03-02 14:05:15 86
原创 LeetCode刷题笔记 279(涉及到动态规划、BFS)
题目:完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.答案:1.动态规划参考链接:完全平方数令dp[i]表示和为i的完全平方数的最...
2020-03-02 13:08:15 339 1
原创 LeetCode刷题笔记 74、240
题目:搜索二维矩阵I答案:二分法输入的 m x n 矩阵可以视为长度为 m x n的有序数组。row = idx / n , col = idx % n。class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length; ...
2020-03-01 13:44:19 113
原创 LeetCode刷题笔记 239 / 剑指Offer 59(涉及到双端队列)
题目:滑动窗口最大值答案:参考链接:详细通俗的思路分析,多解法1.优先队列建立大顶堆,保证堆顶是最大值。每次移除元素时间复杂度O(k)class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; if (nums == null |...
2020-03-01 13:04:24 156
原创 LeetCode刷题笔记 238 / 剑指Offer 66
题目:除自身以外数组的乘积给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空...
2020-02-29 19:51:39 423
原创 LeetCode刷题笔记 236 / 剑指Offer 68
题目:二叉树的最近公共祖先答案:参考链接:JAVA DFS+剪枝递归我们使用DFS搜索每一个节点的左右子树:1、若子树上存在p和q的公共节点,返回此公共节点2、若不存在公共节点,但是存在p或q任意一个节点,返回此节点3、若不存在公共、p、q节点,则返回null。那么,有以下几个结论:1、若当前节点为null、p、q之一,直接返回当前节点2、若左子树上存在公共节点(返回值非p、...
2020-02-29 13:30:57 176
原创 LeetCode刷题笔记 234
题目:回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?答案:1.用快慢指针向后遍历,同时翻转链表的前半部分,然后与链表后半部分进行比较快指针走到最后时,慢指针走到中间节点,边走边翻转链表前半部分...
2020-02-27 19:02:11 83
原创 LeetCode刷题笔记 226 / 剑指Offer 27
题目:翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1答案将二叉树所有的节点的左右孩子交换。相当于不管用什么方式,只要遍历所有节点,并把节点的左右孩子交换即可。1.递归class Solu...
2020-02-27 15:20:44 142
原创 LeetCode刷题笔记 221(涉及到动态规划)
题目:最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4答案:参考链接:最大正方形动态规划1.我们用 0 初始化另一个矩阵 dp,维数和原始矩阵维数相同;2.dp(i,j) 表示的是在左上角矩阵中由matrix[i-1][j-1]参与构...
2020-02-26 13:26:42 182
原创 LeetCode刷题笔记 215
题目:数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。答案:1...
2020-02-26 11:50:55 145
原创 LeetCode刷题笔记 208(涉及到前缀树)
题目:实现Trie(前缀树)实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.star...
2020-02-25 18:16:26 152
原创 LeetCode刷题笔记 207(涉及到拓扑排序)
题目:课程表答案:通过 拓扑排序 判断此课程安排图是否是 有向无环图(DAG)拓扑排序是对 DAG 的顶点进行排序,使得对每一条有向边 (u, v),均有 u(在排序记录中)比 v 先出现。首先明确思路:每一个顶点都有入度和出度,入度为0说明没有指向它的,那么就从它开始往下找。(1)将入度为0的顶点m(及其关联边)从图G中取出,则剩余的G’依然是有向无环图。(2)重新考量图G’,重复...
2020-02-25 12:08:35 156
原创 LeetCode刷题笔记 206
题目:反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL答案:1.迭代eg:1->2->3->4->5->NULL假设经过若干操作,我们已经把3之前的节点调整完毕,这些节点的next都指向前一个节点。接下来把3的next指...
2020-02-24 18:07:05 128
原创 LeetCode刷题笔记 200(涉及到深度优先、广度优先)
题目:岛屿数量给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3答案:参考链接:https://leet...
2020-02-24 15:24:40 228
原创 剑指Offer刷题笔记 38 Java实现
题目:字符串的排列输入一个字符串(可能有字符重复),按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。答案:第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。第二步固定第一个字符,求后面所有字符的排列。仍把后面的字符分为两部分:后面字符的第一个字符(与它后面...
2020-02-23 21:28:55 211
原创 剑指Offer刷题笔记 37 / LeetCode刷题笔记 297 java实现
题目:序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过某种符号表示空节点(#),结点的数值之间用一个特殊字符(如’,’)隔开。二叉树的反序列化是指:根据某种遍历...
2020-02-23 19:54:29 158
原创 LeetCode刷题笔记 198(涉及到动态规划)
题目:打家劫舍答案动态规划f(k) = 从前 k 个房屋中能抢劫到的最大数额,Ai = 第 i 个房屋的钱数首先看 n = 1 的情况,显然 f(1) = A1再看 n = 2,f(2) = max(A1,A2)。,对于 n = 3,有两个选项:(1)抢第三个房子,将数额与第一个房子相加。(2)不抢第三个房子,保持现有最大数额。显然,你想选择数额更大的选项。于是,可以总结出公式...
2020-02-23 13:43:23 135
原创 LeetCode刷题笔记 169 / 剑指Offer 39(涉及到投票算法)
题目:求众数给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2答案:1.哈希表用哈希表来快速统计每个元素出现的次数。然后遍历哈希表,返回value大于n/2的key值...
2020-02-23 12:53:58 165
原创 LeetCode刷题笔记 160 / 剑指Offer 52
题目:相交链表编写一个程序,找到两个单链表相交的起始节点。答案:参考链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/xiang-jiao-lian-biao-by-leetcode/1.暴力法对链表A中的每一个结点 ai ,遍历整个链表 B 并检查链表 B 中是否存在结点和 a...
2020-02-23 12:26:40 177
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人