- 博客(31)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 Java常用类—Math&Random&包装类的常用方法
文章目录MathRandom包装类其他MathMath类主要用来完成一些数学运算,有以下主要方法:常用方法:方法声明功能描述Math.abs(double n)计算绝对值Math.sin(double n)计算正弦值Math.cos(double n)计算余弦值Math.tan(double n)计算正切值Math.sqrt(double n)计算平方根的值Math.cbrt(double n)计算立方根的值Math.pow(dou
2021-06-11 19:31:12
324
原创 数据结构—图
定义图G是由一个非空的顶点集合V和一个描述顶点之间的关系即边集E的一种数据结构,记为G = (V,E)1、图G不可以为空,E可以为空,但V一定是非空集2、图分为无向图和有向图① 无向图:若E为无向边的有限集合,则G为无向图。边是顶点的无序对,记为(v1,v2)(v_1,v_2)(v1,v2)或(v2,v1)(v_2,v_1)(v2,v1),且(v1,v2)=(v2,v1)(v_1,v_2) = (v_2,v_1)(v1,v2)=(v2,v1),v1和v2互为邻接点G可以
2021-06-07 22:05:49
554
原创 Java常用类—String&StringBuffer类的常用方法
前言Java语言中有许多常用类,如:处理字符串,数学,日期,时间等。针对字符串提供了常用的String类和StringBuffer类String初始化1、使用字符串常量直接初始化一个String对象//String 变量名 = 字符串;//初始化为"abc"String s1 = "abc";//初始化为空字符串String s2 = ""; //初始化为空String s3 = null; 空字符串(""):长度为0,在内存中会分配空间null:空引用,表示一个对
2021-06-07 19:52:57
519
原创 LeetCode 1003. 检查替换后的词是否有效
题目链接题目描述:给你一个字符串 s ,请你判断它是否 有效 。字符串 s 有效 需要满足:假设开始有一个空字符串 t = “” ,你可以执行 任意次 下述操作将 t 转换为 s :将字符串 “abc” 插入到 t 中的任意位置。形式上,t 变为 tleft + “abc” + tright,其中 t == tleft + tright 。注意,tleft 和 tright 可能为 空 。如果字符串 s 有效,则返回 true;否则,返回 false。示例 1:输入:s = "aabcbc"
2021-06-07 00:20:16
406
原创 LeetCode 946. 验证栈序列
题目链接题目描述:给定 pushed 和 popped 两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), pop() -> 4,push(5), pop() -&g
2021-06-06 23:41:29
132
原创 LeetCode 856. 括号的分数
题目链接题目描述:给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:● () 得 1 分。● AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。● (A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 2示例 3:输入: "()()"输出: 2示例 4:输入: "(()(()))"输出: 6提示:S 是平衡括号字符串,且只含有 ( 和 ) 。2 <= S.le
2021-06-06 12:20:56
210
原创 Java常用集合基础总结
文章目录集合集合概述集合体系核心框架图分类单列集合双列集合集合和数组的区别Collection主要方法ListArrayListVectorStackLinkedListCollection常用遍历方法Iterator遍历集合foreach遍历集合forEach遍历SetHashSetTreeSetMapHashMapTreeMapMap常用遍历方法Iterator遍历集合foreach遍历集合forEach遍历集合集合特征图小结集合集合概述1、Java集合就是一个容器,用来存储Java对象的引用(通
2021-06-05 11:05:58
570
原创 LeetCode 225. 用队列实现栈
题目描述:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。示例:输入:["MyStack", "push", "push", "top", "pop", "empty"]
2021-06-03 09:36:13
122
原创 LeetCode 232. 用栈实现队列
题目链接题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from to
2021-06-03 09:16:27
197
原创 LeetCode 115. 不同的子序列
题目链接题目描述:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:s = "rabbbit", t = "rabbit"输出:3解释:如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。(上箭头符号 ^ 表
2021-05-21 15:55:03
110
原创 LeetCode 2. 两数相加
题目链接题目描述:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9]
2021-05-17 15:40:01
105
原创 LeetCode 64. 最小路径和
题目描述:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12提示:m == grid.lengthn == grid[i].length1 <= m, n <
2021-05-15 23:40:27
164
原创 十大经典排序(六) —— 复杂度、稳定性及排序方式
十大常见排序排序排序排序最好情况最好情况最好情况最坏情况最坏情况最坏情况平均时间复杂度平均时间复杂度平均时间复杂度空间复杂度空间复杂度空间复杂度排序方式排序方式排序方式稳定性稳定性稳定性插入排序插入排序插入排序O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(1)O(1)O(1)In−placeIn-placeIn−place稳定稳定稳定希尔排序希尔排序希尔排序O(nlogn)O(nlogn)O(nlogn)O(
2021-05-15 10:30:44
176
原创 十大经典排序(五) —— 堆排序
文章目录堆排序堆的概念及性质概念性质堆排序思想图解代码复杂度稳定性堆排序堆的概念及性质概念堆是一种数据结构,是一种树形结构,也叫做二叉堆,通常说的堆,若不加说明指的都是二叉堆性质1、堆是一个完全二叉树,每一个结点的子树也是一个完全二叉树2、堆分为最大堆和最小堆(大根堆和小根堆)①最大堆:每个结点的值都大于等于子结点的值②最小堆:每个结点的值都小于等于子结点的值堆排序思想堆排序是利用堆的概念进行的排序,有两种情况:1、大根堆:每个结点的值都大于等于子结点的值,排序为升序2、小根堆:
2021-05-15 10:14:41
137
原创 剑指 Offer-Day7
文章目录剑指 Offer 42. 连续子数组的最大和剑指 Offer 50. 第一个只出现一次的字符剑指 Offer 53 - I. 在排序数组中查找数字 I剑指 Offer 42. 连续子数组的最大和题目链接题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1
2021-05-11 22:35:23
109
原创 剑指 Offer-Day6
文章目录剑指 Offer 28. 对称的二叉树剑指 Offer 30. 包含min函数的栈剑指 Offer 39. 数组中出现次数超过一半的数字剑指 Offer 28. 对称的二叉树题目链接题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像
2021-05-10 23:54:06
145
原创 十大经典排序(四) —— 快速、归并
文章目录1、快速排序思想图解代码复杂度稳定性2、归并排序思想图解代码复杂度稳定性1、快速排序思想通过一趟排序将数据分成两部分,一部分的数据值全部小于关键字,另一部分全部大于或者等于关键字,然后继续将这两部分进行同样操作,直到序列有序图解代码两个函数int Partition(int *a, int low, int high) { int key = a[low]; while (low < high) { while (low < high &a
2021-05-09 15:48:54
130
原创 剑指 Offer-Day5
文章目录剑指 Offer 24. 反转链表剑指 Offer 25. 合并两个排序的链表剑指 Offer 27. 二叉树的镜像剑指 Offer 24. 反转链表题目链接题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000思路:1、递归法:1、首先判
2021-05-09 15:42:49
117
原创 十大经典排序(三) —— 计数、桶、基数
文章目录1、计数排序原理图解代码复杂度稳定性2、桶排序思想图解代码复杂度稳定性3、基数排序思想图解代码复杂度稳定性1、计数排序原理创建一个长度为 k+1 的数组,每个数组的值对应输入数组中数字出现的次数,通过遍历一次输入数组并统计每个元素出现次数,最后遍历输出图解代码void CountSort(int *a, int n) { int i; int k = 0; int minValue = a[0]; int maxValue = a[0]; for
2021-05-08 22:10:27
427
原创 剑指 Offer-Day4
文章目录剑指 Offer 18. 删除链表的节点剑指 Offer 21. 调整数组顺序使奇数位于偶数前面剑指 Offer 22. 链表中倒数第k个节点剑指 Offer 18. 删除链表的节点题目链接题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1
2021-05-08 10:10:50
147
原创 剑指 Offer-Day3
文章目录剑指 Offer 11. 旋转数组的最小数字剑指 Offer 15. 二进制中1的个数剑指 Offer 17. 打印从1到最大的n位数剑指 Offer 11. 旋转数组的最小数字题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0
2021-05-07 22:00:24
174
原创 十大经典排序(二) —— 冒泡、选择
文章目录1、冒泡排序原理图解代码复杂度稳定性适用性2、选择排序原理图解代码复杂度稳定性适用性1、冒泡排序原理1、从后往前(从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完,称这样的过程为"一趟冒泡排序",最多只需n-1躺排序2、每一趟排序都可以使一个元素的移动到最终位置,已经确定最终位置的元素在之后的处理中无需再对比3、如果某一趟排序过程中未发生"交换",则算法可提前结束图解代码void BubbleSort(int *a, int n) { int i, j,
2021-05-06 23:42:38
197
原创 十大经典排序(一) —— 插入、希尔
文章目录前言1、插入排序思想图解直接插入排序原理代码适用性折半插入排序原理&步骤代码适用性复杂度稳定性2、希尔排序原理&步骤图解代码复杂度稳定性适用性前言十大经典排序 —— 前言1、插入排序思想从前向后遍历,将待排序的元素插入前面已经排序好的子序列中,直到全部元素插入完成图解直接插入排序原理顺序查找找到插入的位置代码void InsertSort(int *a, int n) { int i, j, t; for (i = 1; i < n; i
2021-05-06 23:27:28
311
原创 十大经典排序 —— 前言
文章目录排序排序是什么?分类内部排序和外部排序稳定排序和不稳定排序比较排序和非比较排序十大常见排序排序排序是什么?排序就是将一个可以是有序的,也可以是无序的序列,重新排列成一个有序的序列排序后的序列可以是递增序列,也可以是递减序列分类内部排序和外部排序内部排序就是在内存储器,也就是在内存中进行的排序外部排序是由于待排序序列数量太大,内存无法存放,只能借助于外存储器进行的排序常用的排序算法都是内部排序稳定排序和不稳定排序如果排序前value1=value2,且相对位置index1<
2021-05-06 22:56:02
313
原创 剑指 Offer-Day2
剑指 Offer 09. 用两个栈实现队列题目链接题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQu
2021-05-06 21:34:08
193
原创 剑指 Offer-Day1
剑指 Offer 03. 数组中重复的数字题目链接题目描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000思路:先排序,比较相邻两个元素代码:class Solution {public: int findR
2021-05-05 17:20:25
218
1
原创 BF & KMP算法
文章目录BF算法代码实现:KMP算法KMP next数组实现KMP nextval数组实现结语BF算法暴风(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种暴力算法代码实现:int BF(string S, string T) { int i = 0, j = 0, k
2021-05-05 12:20:23
130
原创 二叉排序树 BST & 平衡二叉查找树 AVL
文章目录二叉排序树 BST性质:二叉排序树的查找二叉排序树的插入二叉排序树的创建二叉排序树的删除平衡二叉查找树 AVL性质分类LL原树:插入结点:右单旋转:代码实现:RR原树:插入结点:左单旋转:代码实现:LR原树:插入结点:左旋:右旋:RL原树:插入结点:右旋:左旋:小结二叉排序树 BST二叉排序树,又叫二叉查找树性质:1、左子树的所有结点的值均小于根结点的值2、右子树的所有结点的值均大于根结点的值3、左子树和右子树又各是一棵二叉排序树4、二叉排序树的中序遍历是一个递增序列二叉排序树的查找
2021-05-05 11:10:25
197
原创 二叉树基本性质和操作
文章目录树—Tree定义树的基本术语树的基本性质二叉树定义二叉树的特点二叉树的性质特殊二叉树斜树定义特点满二叉树定义特点完全二叉树定义特点二叉树操作结构体创建二叉树遍历先序遍历-DLR中序遍历-LDR后序遍历-LRD层序遍历双序遍历树的深度结点个数叶子结点个数叶子结点到根结点的路径左右结点互换树、森林与二叉树的转换树转换为二叉树森林转换为二叉树二叉树还原为树二叉树还原为森林结语树—Tree定义树(Tree)是n(n≥0)个结点的有限集;n=0时称为空树;在任意一棵非空树中:(1) 有且仅有一个特定的
2021-05-04 09:57:08
338
原创 栈 & 队列
栈—Stack定义栈是限定仅在表尾进行插入和删除操作的线性表允许插入和删除的一端称为栈顶,另一端称为栈底不含任何数据元素的栈称为空栈栈又称为后进先出线性表,简称LIFO结构,或者称为先进后出,简称FILO结构栈操作结构体struct Node { int data; Node *next;};struct Stack { Node *top; int count;};初始化栈//初始化栈void InitStack(Stack *s) {
2021-05-03 17:48:15
217
原创 线性表—顺序表&单链表
线性表—Linear List相关概念1、定义:n(n≥0)个数据元素的有限序列2、线性表是一种最常用且最简单的数据结构,含有n个元素的线性表是一个数据结构3、"一对一"逻辑关系4、前驱后继:若将线性表记为a1,a2,a3…ai-1,ai,ai+1…an,则称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,3…n-1时,ai有且仅有一个直接后继,当i=2,3,4…n时,ai有且仅有一个直接前驱5、线性表的元素的个数n(n≥0)定义为线性表的长度,当n=0时,称为空表
2021-05-01 10:35:05
658
TA创建的收藏夹 TA关注的收藏夹
TA关注的人