
数据结构
文章平均质量分 79
数据结构
qianye_97
这个作者很懒,什么都没留下…
展开
-
[java] 进制
一、进制进制就是进位制,是人们规定的一种进位方法。 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位,二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。二、分类Java进制分为二进制,八进制,十进制,十六进制, 但是计算机只能处理2进制的数据和指令。二进制由0,1组成,以0b开头。(b大小写都行)八进制由0,1,…,7组成,以0开头。十进制由0,1,…,9组成,整数默认为十进制。十六进制由0,1,…,9,a,b,c,d,e,f原创 2021-03-14 15:34:22 · 149 阅读 · 0 评论 -
[java] 动态规划专题
一、线型动态规划1.1、单串问题1.1.1、最经典单串LIS系列题目:300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解析定义dp[i]dp[i]dp[i] 为考虑前 i 个元素,以第 i 个数字结尾的最长上升子序列的长度,注意 nums[i]nums[i]nums[i] 必须被选取。我们从小到大原创 2021-03-13 20:51:46 · 244 阅读 · 0 评论 -
[java] 数组,字符串专题
题目5. 最长回文子串(动态规划)151. 翻转字符串里的单词(collections,split,reverse,join)tips集合、列表和数组集合里的元素类型不一定相同,集合里的元素没有顺序列表有顺序数组有索引;java里数组里的元素类型必须相同;数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存字符串对于不同的编程语言中,字符串可能是可变的,也可能是不可变的。不可变意味着一旦字符串被初始化,你就无法改变它的内容。在某些语言(如 C ++)中,字符串是可变的。原创 2021-03-09 19:41:42 · 161 阅读 · 0 评论 -
[java] 链表专题
题目21. 合并两个有序链表82. 删除排序链表中的重复元素 II83. 删除排序链表中的重复元素86. 分隔链表92. 反转链表 II138. 复制带随机指针的链表(解法比较巧妙)141. 环形链表142. 环形链表 II(数学方法计算)143. 重排链表(综合性比较强:找链表中点+反转链表+合并两个有序链表)148. 排序链表206. 反转链表234. 回文链表技巧1. 设置虚拟头2. 快慢指针(快指针每次走两步,慢指针每次走一步)ListNode slow=head;原创 2021-03-05 21:21:40 · 87 阅读 · 0 评论 -
[java] 常用排序算法
1. 冒泡排序a、冒泡排序,是通过每一次遍历获取最大/最小值b、将最大值/最小值放在尾部/头部c、然后除开最大值/最小值,剩下的数据在进行遍历获取最大/最小值d、代码实现 public static void sort(int arr[]) { //冒泡 for(int i=0;i<arr.length;i++){ for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ int t原创 2021-03-05 11:01:49 · 151 阅读 · 1 评论 -
[java] 堆排序
简介堆是一种数据结构,一种叫做完全二叉树的数据结构。分类大顶堆:每个节点的值都大于或者等于它的左右子节点的值。小顶堆:每个节点的值都小于或者等于它的左右子节点的值。基本思想将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素;2.将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了原创 2021-02-02 18:33:26 · 120 阅读 · 0 评论 -
[java] KMP算法
引言题目: 28. 实现 strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1说明:当 needle 是空字符串时,原创 2021-01-05 19:01:53 · 149 阅读 · 0 评论 -
[java] 回溯算法+剪枝
814. 二叉树剪枝题目给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:输入: [1,null,0,0,1]输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。说明:给定的二叉树最多有 100 个节点。每个节点的值只会为 0 或 1 。思路用递归,函数体的意思就是给根节原创 2021-01-03 14:48:32 · 994 阅读 · 1 评论 -
[java] 跳表
定义跳表是可以实现二分查找的有序链表抛硬币插入的时候有一点需要注意,就是在原始链表里插入一个数之后,要不要去更新索引,因为如果不更新索引,那么一旦插入的数据比较多,那么跳表存在的意义还是不大。但若是每插入一次就更新又没有必要。所以这里用抛硬币来决定要不要添加索引。从下往上,每一次都通过抛硬币来决定要不要在这一层添加一个索引。题目1206-设计跳表不使用任何库函数,设计一个跳表。跳表是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当,并原创 2020-12-26 13:56:43 · 199 阅读 · 0 评论 -
[java] 并查集
0 定义并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。常用操作查询元素a和元素b是否属于同一组合并元素a和元素b所在的组1 结构1.1、初始化我们准备n个节点来表示n个元素。最开始时没有边。2.2、合并像下图一样,从一个组的根向另一个组的根连边,这样两棵树就变成了一棵树,也就是把原创 2020-12-25 22:36:52 · 129 阅读 · 0 评论 -
[java] Trie前缀树
定义又称单词查找树,字典树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。这是一颗存储了see, pain, pand和dog四个单词的前缀树如果不考虑字母的大小写,那么Trie字典树的每个节点都可能有26个子节点。Trie的常用操作(构造、查找单词和查找前缀)删除操作用的较少,我就不写了构原创 2020-12-18 15:07:04 · 186 阅读 · 0 评论 -
[java] 动态规划
动态规划之(装载问题/01背包问题)1、问题描述一艘船可装载重量为12,有6个集装箱,各自的重量为a[n]=[1,2,3,4,5,6],设计一个可以装载的方案,使得船装下集装箱重量最大2、问题解决2.1、网格解法比较有趣的一句话是:每个动态规划都从一个网格开始。 (所以学会网格的推导至关重要,而有些题解之所以写的不好,就是因为没有给出网格的推导过程,或者说,没有说清楚为什么要”这样“设计网格。)装载问题的网格如下:m[i][j]j01234567891011原创 2020-12-16 22:15:47 · 435 阅读 · 3 评论 -
[java] 位运算
1、常见位运算符符号描述运算规则&与两个位都为1时,结果才为1|或两个位都为0时,结果才为0^异或两个位相同为0,相异为1~取反0变1,1变0<<左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位,对无符号数,高位补0;有符号数,有的编译器补符号位(算术右移),有的补0(逻辑右移)1.1 与运算符 &运算规则: 0&0=0 0&1=0 1原创 2020-12-10 21:08:53 · 196 阅读 · 1 评论 -
[java] 树基础
这篇文章就是对树的知识做一个整理,主要以二叉树为例1、定义 * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }2、遍历2.1、先序遍历递归实现 public void preOrder(TreeNode root) { if(root!=null){ System.原创 2020-11-30 19:55:33 · 223 阅读 · 0 评论 -
[java] 常用数据结构的定义以及相关函数
1、数组及列表1. 数组 []int array[]=new int[size]2. List (ArrayList和LinkedList)定义List<Integer> arrayList = new ArrayList<Integer>();List<Integer> arrayList = new LinkedList<Integer>();常用操作访问某个值:arrayList.get(i)添加某个值:arrayList.add原创 2020-11-24 21:00:01 · 730 阅读 · 0 评论 -
[java] 单调栈
单调栈是一种特殊的栈,要求栈中的元素是单调递减或者单调递减的。1、适用场景单调栈适合的题目是求解下一个大于 xxx或者下一个小于 xxx这种题目。所有当你有这种需求的时候,就应该想到单调栈。2、介绍比如我们需要依次将数组 [1,3,4,5,2,9,6] 压入单调栈。首先压入 1,此时的栈为:[1]继续压入 3,此时的栈为:[1,3]继续压入 4,此时的栈为:[1,3,4]继续压入 5,此时的栈为:[1,3,4,5]如果继续压入 2,此时的栈为:[1,3,4,5,2] 不满足单调递减栈的特原创 2020-11-09 21:29:00 · 3369 阅读 · 0 评论