- 博客(126)
- 收藏
- 关注
原创 leetcode-97. 交错字符串
题目链接:https://leetcode-cn.com/problems/interleaving-string给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1
2021-12-04 17:36:04
241
原创 LeetCode - 38. 外观数列
题目来源:力扣(LeetCode)- 38. 外观数列链接:https://leetcode-cn.com/problems/count-and-say给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1
2021-11-27 14:41:56
153
原创 leetcode-LRU缓存机制
题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。示例:LRUCach
2020-07-31 17:22:19
237
原创 Egg.js
Egg.js是什么快速入门快速初始化使用脚本快速生成项目mkdir egg-example && cd egg-examplenpm init egg --type=simplenpm i启动项目npm run dev访问http://localhost:7001即可逐步搭建1.初始化项目$ mkdir egg-example$ cd egg-example$ npm init$ npm i egg --save$ npm i egg-bin --save
2020-06-23 13:31:46
1522
1
原创 在vscode上使用Eslint检查代码格式并格式化
在vscode上使用Eslint检查代码格式并格式化使用命令行全局安装Eslint与相关依赖,切换到项目目录,执行命令:npm install -g eslintnpm i eslint eslint-config-egg --save-dev在vscode中安装ESLint插件,安装脚本过程自行查阅网上资料。配置ESLint插件:在 文件 -> 首选项 -> 设置中添加代码:"editor.codeActionsOnSave": { "source.fixAll.es
2020-06-01 18:15:15
1865
原创 JS学习笔记
JS学习笔记JavaScript 输出使用 window.alert() 弹出警告框。使用 document.write() 方法将内容写到 HTML 文档中。使用 innerHTML 写入到 HTML 元素。使用 console.log() 写入到浏览器的控制台。JavaScript数据类型值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)...
2020-01-08 09:18:17
132
原创 Json数据数组的前后端处理
Json数据前后端对JSON数据的处理前端数据[ {alias: "区域", cacheable: false, cacheableStr: "", cdValue: "", checkDescendents: false}, {alias: "城市", cacheable: false, cacheableStr: "", cdValue: "", checkDescend...
2019-12-13 14:20:51
365
原创 观察者模式
观察者模式观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会收到通知并自动更新。使用一个气象站WeatherData(会更新气象数据),和一个布告栏(获取气象数据并展示)的例子创建一个被观察者(主题)必须实现的接口。//被观察者需要实现的接口public interface Observable { //增加观察者的方法 public...
2019-11-21 22:40:43
98
原创 策略模式学习
策略模式模拟鸭子应用使用继承实现使用一个父类,所有的子类都继承其父类以实现鸭子的一些共同行为//鸭子的父类,所有的鸭子都实现该父类public class Duck { //鸭子呱呱叫方法 public void quack(){} //鸭子会游泳 public void swim(){} //展示方法 public void displa...
2019-11-20 23:27:11
141
原创 剑指offer-正则表达式匹配
题目请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的字符’.'表示任意一个字符,而 * 表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是"aa.a"和"ab*a"均不匹配解题思路第一步:使用2个指针i,j对应目标数组和匹配数组,2个字符数组分别往后遍历。如果2...
2019-09-06 16:39:13
102
原创 剑指offer-构建乘积数组
题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。解题思路第一步:创建一个数组B第二步:循环一次,把B[i]赋值为 A[0] * A[1] * ··· * A[i-1];第三步:从后往前循环一次,把B[i]赋值为B[i] * A[n] * A[n-1] * ...
2019-09-06 10:24:29
89
原创 剑指offer-不用加减乘除做加法
题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路把2个数当成二进制数来解决。第一步:二进制数的按位相加,不考虑进位,即直接2个数异或。因为如果11,00相加,都为0;第二步:得到二进制数的所进位,即2个数按位与并左移一位。因为,如果11相加,则说明有进位,并且进位要左移一位。第三步:如果进位不为0,则继续重复1,2步,直到进位为0。代码如下...
2019-09-04 10:43:37
77
原创 剑指offer-和为S的连续正数序列
题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!解题思路第一种:暴力解法1、遍历1到n/2+...
2019-09-03 15:42:00
98
原创 剑指offer-数组中只出现一次的数字
题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解题思路使用位运算。如果一个数组只有一个数字出现一次,其他的出现2次,则全部异或剩下的数就是出现一次的数。同理,这题下来,剩下的数即为2个出现一次的数的异或。2个出现一次的数字的异或为1的位置,则说明2个数出现一次的数的该位必然不同,一个为1一个为0。根据此可以把该数组分为2个部分,分别异或...
2019-09-02 19:54:53
81
原创 剑指offer-数组中的逆序对
题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007解题思路使用归并排序的想法,把数组分成2个,归并时直接比对2个数组之间,即可得出多少逆序对。随即把2个数组归并排序,合并之后的比较。代码如下import java.util.*;pu...
2019-09-01 22:04:40
93
原创 剑指offer-第一个只出现一次的字符
题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解题思路第一步:使用2个长度52的数组,一个用来保存字符的个数,一个用来保存字符的下标第二步:遍历记录个数的数组,找到个数为1,下标最小的值。代码如下public class Solution { public i...
2019-08-30 18:26:22
115
原创 剑指offer-丑数
题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路丑数都是由2、3、5相乘得来的;之前的丑数*(2、3、5)所能得到的最小值即为新的丑数。例如:第一个丑数是1,第一个丑数 *(2、3、5)中最小的2,即为新的丑数,即第二个丑数。第一步:使用一个数...
2019-08-30 16:48:27
90
原创 剑指offer-最小的K个数
题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路用快速选择找出第k大的数,前面的就是最小的k个数。代码如下import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Sol...
2019-08-27 21:27:54
104
原创 剑指offer-二叉搜索树与双向链表
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路第一步:二叉搜索树转为排序的双向链表,必然是使用中序遍历。第二步:使用一个指针,用来从最小值遍历到最大值。第三步:使用递归的中序遍历,之后使当前的值指向下一个值,下一个值指向当前值则可以使其转为双向链表代码如下public TreeNode Convert(T...
2019-08-13 21:13:12
102
原创 剑指offer-二叉树中和为某一值的路径
题目输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路直接深度遍历,每次减去当前节点的值,直到叶子节点,判断val是否target,是则说明是一条路径,否则不是。代码如下public ArrayList<ArrayList&...
2019-08-13 19:25:52
80
原创 剑指offer-栈的压入、弹出序列
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路第一步:pushA从头遍历,popA从尾开始;如果pushA[i]==popA[...
2019-08-05 21:24:01
99
原创 剑指offer-包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路第一步:使用一个min变量保存栈中的最小值第二步:在每次对栈中进行增删时判断最小值是否改变,如果改变则维护min的值。代码如下Stack<Integer> stack = new Stack<>(); int min = Integer.MA...
2019-08-05 19:48:25
92
原创 剑指offer-二叉树的镜像
题目操作给定的二叉树,将其变换为源二叉树的镜像。解题思路递归解法第一步:如果根节点为空,直接结束;第二步:交换2个子结点的位置;第三步:递归子结点。代码如下public void Mirror(TreeNode root) { if (root == null) return; TreeNode temp = root.left; r...
2019-08-04 22:48:38
95
原创 剑指offer-树的子结构
题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路以下是使用的递归思路:第一步:如果root2为空,则说明root2是root1的子结构。(这需要一个辅助条件,就是这题目上要求,root2为空即返回false需要排除掉) 如果root1为空,则说明不是root1的子结构。第二步:如果root1和root2不相同,则返回root1的子节点...
2019-08-04 15:33:12
84
原创 剑指offer-合并两个排序的链表
题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路第一步:定义一条新的空链表第二步:比较两条链表的表头,把小的接在新链表后面,直到某一条链表为空第三步:把不为空的另一条链表接在新链表后面即可。代码如下public ListNode Merge(ListNode list1,ListNode list2) { Lis...
2019-08-04 14:03:23
84
原创 剑指offer-反转链表
题目输入一个链表,反转链表后,输出新链表的表头。解题思路第一步:创建一个新结点p;第二步:把原链表的每一个结点都取出来,用头插法接在p之后即可。代码如下/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; ...
2019-07-27 23:56:25
71
原创 剑指offer-链表中倒数第k个结点
题目输入一个链表,输出该链表中倒数第k个结点。解题思路使用快慢指针。定义2个指针p,q。第一步:先使用q指针走k步。第二步:p、q一起走,直到q走到链表结尾,p则为所求代码如下/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.v...
2019-07-27 23:41:28
83
转载 Java异常体系
Error和Exception的区别从概念角度解析java的异常处理机制Error:程序无法处理的系统错误,编译器不做坚持Exception:程序可以处理的异常,捕获后可能恢复Java的异常体系从责任角度看:Error属于JVM需要负担的责任RuntimeException是程序应该负担的责任CheckedException可检测异常是Java编译器应该承担的责任Chec...
2019-07-14 10:47:48
88
原创 leetcode337. 打家劫舍 III
题目在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。 计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2...
2019-07-14 10:43:08
106
原创 leetcode334. 递增的三元子序列
题目给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, 使得 arr[i] < arr[j] < arr[k],返回 true ; 否则返回 false 。 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入:...
2019-07-13 22:16:15
394
原创 Java线程学习
Java线程学习进程和线程的区别进程是资源分配的最小单位,线程是CPU调度的最小单位。进程可以看作是独立的应用,线程不可以。进程有独立的地址空间,互相不影响,线程只是进程的不同执行路径。线程没有独立的地址空间,多进程程序比多线程程序健壮进程的切换开销比线程大Java进程和线程的关系每运行一个程序就会产生一个进程,进程至少包含一个线程。每个进程对应一个JVM实例,多个线程共享J...
2019-07-13 20:55:54
197
原创 leetcode328. 奇偶链表
题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->...
2019-07-11 15:56:40
172
原创 leetcode324. 摆动排序 II
题目给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。示例 1:输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]示例 2:输入: nums = [1, 3, 2, 2, 3, 1]输出: 一个可能的答案是 [2,...
2019-07-10 11:41:12
306
原创 leetcode319. 灯泡开关
题目初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。示例:输入: 3输出: 1解释: 初始时, 灯泡状态 [关闭, 关闭, 关闭]. 第一轮后, ...
2019-07-10 10:38:20
186
原创 leetcode318. 最大单词长度乘积
题目给定一个字符串数组 words,找到 length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例 1:输入: [“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]输出: 16 解释: 这两个单词为 “abcw”, “xtfn”。...
2019-07-09 19:27:37
259
原创 leetcode313. 超级丑数
题目编写一段程序来查找第 n 个超级丑数。超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。示例:输入: n = 12, primes = [2,7,13,19]输出: 32解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。说明:...
2019-07-07 11:47:07
248
原创 Linux学习笔记
Linux学习笔记Linux简介Ken Thompson 与Dennis Ritchle用C语言重写了Unix的第三版内核。Linux系统安装分区:Linux规定每一个硬盘设备最多能有4个主分区(其中包含扩展分区)。现在基本上都是SATA接口,所以一般是/dev/sda11234是主分区保留的,逻辑分区只能从5开始。格式化:根据写入文件系统,把硬盘分成一个个带下的block,同时也...
2019-07-05 09:49:56
932
原创 leetcode299. 猜数字游戏
题目你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。请...
2019-06-15 14:45:29
370
原创 leetcode274. H指数
题目给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h 指数。h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)”示例:输入: citations = [3,0,...
2019-06-13 19:52:09
223
原创 Linux基本指令学习
Linux学习常用指令记录find作用:在指定目录下查找文件语法: find path [options] paramsfind ~ -name “1.txt” :根据文件名精确查找~下的文件find / -name “target*” :根据文件名模糊查找/下的文件find / -iname"target*" :根据文件名模糊查找/下的文件,但是部分大小写man find : ...
2019-06-11 17:18:30
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人