![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
桑英豪
这个作者很懒,什么都没留下…
展开
-
力扣数组类型题目
力扣283class Solution { public void moveZeroes(int[] nums) { int j=0; //先把非0的数在nums中依次排列,剩下再给它们安排上0 for(int i = 0 ; i<nums.length; i++){ if(nums[i]!=0){ nums[j]=nums[i]; j++; .原创 2022-04-01 21:46:27 · 226 阅读 · 0 评论 -
八大算法拿下
快速排序public class sort { public static void main(String[] args){ int arr[]={59,6,3,8,51,23}; QuickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void QuickSort(int[] arr,int left,i.原创 2022-04-05 20:30:07 · 5303 阅读 · 2 评论 -
B树与B+树
二叉排序树简单的实现在多数情况能够达到预期的查找效率,但是每个节点只能存储一个元素和只能有两个孩子,使得在大量数据下会造成二叉排序树的深度特别大,那么在进行查找时多次的访问会造成查找效率的下降,同时,在对二叉查找树进行插入时,可能会破坏二叉查找树的平衡。为了降低对于树的访问次数,实现树的平衡,我们需要新的数据结构来处理这样的问题。1.B树的特点B树中允许一个节点包含多个Key,可以是3个、4个、5个甚至是更多,并不确定,需要看具体实现。现在我们选择一个参数M来构建一个B树,我们可以将其称为M阶..原创 2022-04-05 15:26:37 · 170 阅读 · 0 评论 -
红黑树的生成
红黑树:创建平衡二叉树的成本不小红黑树的定义:每个数的节点不是红色就是黑色根节点是黑色每个叶子节点(空节点)是黑色的如果一个节点是红色的,那么它的子节点一定是黑色的一个节点到该节点的子孙节点的所有路径上包含相同数目的黑色节点确保没有一条路径会比其他路径长两倍,最相对接近平衡的二叉树红黑树的生成2-3-4树变化过来的(4阶B树)下面一个2-3-4树转化成红黑树...原创 2022-04-05 14:59:20 · 925 阅读 · 0 评论 -
平衡二叉树简介和旋转方式
有序二叉树可能存在的问题给一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST)并分析问题所在二叉平衡树的特点1.它是一棵空树或者它两课子树的高度差的绝对值不超过1,并且左右子树都是一棵平衡二叉树2.平衡因子:左子树的高度-右子树的高度我们将平衡因子绝对值小于1的有序二叉树称为平衡二叉树构建平衡二叉树平衡调整的步骤:1.如果发现新插入一个节点之后,造成原有节点的平衡因子>=2,造成了不平衡,需要调整2.找到旋转类型:LL型,RR型,L...原创 2022-04-05 14:38:17 · 480 阅读 · 0 评论 -
树-BST(二叉搜索树)
class Solution { public TreeNode trimBST(TreeNode root, int low, int high) { if(root == null){ return root; } //当根节点值大于最大值,直接返回修剪过的左节点 if(root.val>high){ return trimBST(root.left,low,high);...原创 2022-03-27 16:43:14 · 427 阅读 · 0 评论 -
快速排序的递归实现
public class quickSort { public static void main(String[] args){ int[] arr={2,7,9,3,6,5,4}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr,int left,int .原创 2022-03-27 13:47:50 · 448 阅读 · 0 评论 -
二叉树的前-中-后 序遍历
二叉树的前序遍历class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); stack.push(root); while(!.原创 2022-03-24 15:16:37 · 116 阅读 · 0 评论 -
力扣-树-层序遍历
1.一棵树每层节点的平均数class Solution { public List<Double> averageOfLevels(TreeNode root) { Queue<TreeNode> q = new LinkedList<>(); List<Double> result = new ArrayList<>(); if(root==null){..原创 2022-03-23 20:12:09 · 463 阅读 · 0 评论 -
算法-BFS广度优先搜索
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { //新建一个二维数组 List<List<Integer>> result =new ArrayList<>(); //如果根节点为空,直接返回空了 if(root==null){ return resu...原创 2022-03-23 15:58:47 · 326 阅读 · 0 评论 -
算法-深度优先遍历DFS
思想:从root节点开始,尽可能深的搜索每一个分支,把一个分支的结果搜索完了以后,再去看下一个分支。例子:走迷宫走一条路到终点,再去走其他的路class Solution { public int numIslands(char[][] grid) {//当二位数组为空的时候,岛屿肯定是0 if(grid == null){ return 0; }//统计岛屿数 int result=0;//从头..原创 2022-03-23 15:40:59 · 244 阅读 · 0 评论 -
算法-分治法
将一个大问题切割成一个一个小问题,用到了递归,自己调用自己在返回的过程中,把小问题解决并通过递归返回合并成大问题的解力扣169class Solution { public int majorityElement(int[] nums) {//调用递归函数,递归在返回的时候用到了分治法的思想 return getMajority(nums,0,nums.length-1); }//定义递归函数,数组,左右指针 public int ..原创 2022-03-11 17:53:29 · 289 阅读 · 0 评论 -
算法-递归
定义:函数间接或直接调用自己、必要条件:参数终止条件返回值拆解终止条件:当n=0或1的时候终止,返回这个值,返回上一层时间复杂度:O(2^n)空间复杂度:O(N) 隐式地递归栈,保存每一层的信息,先进后出,复杂度递归的高度,也就是O(N)...原创 2022-03-10 15:44:25 · 159 阅读 · 0 评论 -
Springboot与数据链接
1.引入依赖Web支持(Spring Mvc) <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>模板引擎Thymleaf 整合<dependency>.原创 2022-03-10 14:05:19 · 542 阅读 · 0 评论 -
算法-滑动窗口
目的:减少while循环a=[1,4,2,3,4,5,6] 3个为一组,取最大的和滑动窗口只需要减去一个数加上一个数主要解决的是:数组中的定长问题力扣209思路:原创 2022-03-09 20:41:31 · 330 阅读 · 0 评论 -
算法-二分查找法
重要特点:一定要有序O(logN)力扣704class Solution { public int search(int[] nums, int target) { int a = 0; int b = nums.length-1; int mid = a+(b-a)/2; if(nums.length==0) return -1; if(nums.length==1){ .原创 2022-03-07 15:21:00 · 109 阅读 · 0 评论 -
算法-双指针
两个指针解决一道题-技巧普通双指针:两个指针往同一个方向移动对撞双指针:两个指针面对面移动 (遇到有序情况下可以考虑)快慢双指针:慢指针+快指针a=[1,4,5,7,9]两个数相加=12两个数不能相同用普通双指针从头遍历时间复杂度为O(N^2)对撞双指针 此时时间复杂度为O(N)a=[1,4,5,7,9] 两个数相加=12,两个数不能相同i指第一个 j指最后一个a[i]+a[j]=10 比12小,因为这是有序数组所有要i指针需要往右移动,移动之后a.原创 2022-03-06 20:43:56 · 248 阅读 · 0 评论 -
数据结构-堆Heap
最大堆:最大值==》堆顶元素 每个节点都比它的子节点大最小堆:最小值==》堆顶元素 每个节点都比它的子节点小创建堆数组转化成完全二叉树访问搜索 O(1)--》查看堆顶元素如果是查看任意一个元素 O(N)添加 O(Log N)删除O(Log N)堆的常用操作引入包import java.util.PrioeirtQueue;1. 创建堆最小堆PriorityQueue<Integer> minheap = new Pr...原创 2022-03-06 16:19:47 · 64 阅读 · 0 评论 -
数据结构-树Tree
有父子关系概念节点根节点:第一个(最上面)节点叶子节点:没有子节点的节点高度 深度 层二叉树普通二叉树:每个节点最多有两个孩子满二叉树:除了子节点,每个节点都有左右两个孩子,所有叶子节点在一层完全二叉树:从树的根节点,从上到下,从左到右依次填满节点形成的二叉树二叉树的遍历前序遍历:根节点 左节点 右节点中序遍历:左节点 根节点 右节点后序遍历:左节点 右节点 根节点...原创 2022-03-06 15:46:57 · 71 阅读 · 0 评论 -
数据结构-集合Set
无序不重复注重自己独一无二的特性,1,2,3,3,2==》主要作用:1检查某一个元素是否存在 2重复元素Set:1.HashSet其他忽略不计HashSet 元素=>哈希函数==》哈希值把哈希值放到哈希表中,判断哈希表是否有元素,有元素的话对比是否相等,不相等哈希冲突,相等的话更新 如果哈希表中无此元素,直接存访问搜索:无哈希冲突:O(1)有哈希冲突:O(K)插入:无哈希冲突:O(1)有哈希冲突:O(K)删除:...原创 2022-03-06 14:46:04 · 389 阅读 · 0 评论 -
数据结构-哈希表HashTable*
哈希表=散列值key : value 键值对Java中-HashMapkey---》哈希函数---》内存地址把key/value放在对应的内存地址上哈希碰撞:两个不同的key通过哈希函数得到相同的内存地址把碰撞的地址变成链表形式存储1.访问 不存在2.搜索 O(1) 这是正常情况下,如果碰撞了O(K) K是碰撞元素的个数3.插入 O(1) 直接找到地址插入4.删除 O(1) 直接找到地址哈希表常用操作1.创建哈希表//通过数组创建的..原创 2022-03-05 19:13:05 · 437 阅读 · 0 评论 -
数据结构-栈*
队列-先进先出栈-先进后出访问O(1)搜索 O(N)插入O(1)只能在栈的尾端插入删除 O(1)删除栈顶元素栈的相关操作1.创建栈Stack<Interger> Stack =new Stack<>();2.添加元素stack.push(1);3.查看栈顶元素-即将出栈的元素stack.peek()4.删除栈顶元素-即将出现栈的元素stack.pop();5.栈的长度stack.size();6.栈原创 2022-03-05 17:34:44 · 138 阅读 · 0 评论 -
数据结构-队列
1.访问 O(N)从队列头查到队列尾2.搜索 O(N)从头到尾3.插入 O(1)必须在末尾端插入4.删除 O(1)1.创建队列Queue<Integer> queue = new LinkedList<>();2.添加元素queue.add(1);3.获取即将出队的元素int temp1 = queue.peek();4.删除即将出队的元素//获取要出列的元素,并删除int temp2 = queue.poll(..原创 2022-03-05 14:37:43 · 153 阅读 · 0 评论 -
数据结构-链表
访问Access O(N)搜索 O(N) 不知道内存地址插入 O(1)内存中随便找一个位置,插入数,断开插入位置上一个数的next指针,把上一个数的next指针指向插入的数,把插入数的next指针指到下一个下一个数删除 O(1)把上一个数的next指针断开,把要删除的数的next指针断开,把上一个的数的next指针直接指向下一个的数链表数据结构的读很慢,写很快链表的常见操作1.创建链表LinkedList<Interger> List = new .原创 2022-03-04 17:14:26 · 120 阅读 · 0 评论 -
leetcode-数组
1.创建数组的方式int[] a={1,2,,3}int[] b=new int[]{1,2,3}int[] c=new int[3]存一个长度为3的数组 只存占位符,默认数值为0通过for循环再对数组赋值ArrayList<Interger> arr = new ArrayList<>();不用指定长度和内部元素需要导入ArrayList包2.添加元素3.访问元素int c1=c[1];用ArrayLis...原创 2022-03-04 15:30:46 · 122 阅读 · 0 评论