![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
总结学习数据结构与算法中遇到的问题
Ez4Sterben
这个人一点也不懒
展开
-
【数据结构】回溯算法公式化解题 leetcode经典题目带刷:全排列、组合、子集
回溯算法(Backtracking Algorithm)是一种解决组合问题排列问题选择问题等一类问题的常用算法。它通过尝试所有可能的选择来找到问题的解,当发现当前选择不符合要求时,就回溯到之前的状态,然后尝试其他的选择。如果认真看完的朋友可以发现,对于这种基础的回溯题目,我们都可以通过循环+回溯来解决问题,只需要根据具体问题来更改我们的循环条件即可。当然这么做不一定是最好的,还有许多可以优化的地方,只是说大部分情况可以通过这种循环的方式来解决问题。原创 2023-08-21 16:22:57 · 672 阅读 · 0 评论 -
java数据结构——红黑树简介
一、首先先来了解什么是2-3-4树1.简介2-3-4属于一种多路查找树,是一种四阶的B树,它的结果有以下特点所有叶子节点都拥有相同的深度节点只能是2-节点、3-节点、4-节点节点元素的排序整体上保持二叉查找树的特性,即父节点大于左子节点,小于右子节点;当节点有多个元素时,每个元素都必须大于他左边的和他的左子树中的元素。2.三种节点的示意图①:2-节点:有两个子树的节点②:3-节点:有三个子树的节点③:4-节点:有四颗子树的节点3.构建一颗2-3-4树2-3-4树中结点添加需要原创 2022-04-04 11:45:01 · 2246 阅读 · 0 评论 -
java数据结构——哈希表
public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while(cur != null){ ListNode next = cur.next; cur.next = pre; pre = cur; cur = next; }原创 2022-03-19 21:50:58 · 2115 阅读 · 0 评论 -
java数据结构——哈夫曼树
一、哈夫曼树1、在通讯领域中信息处理的方式(1)定长编码我们要传输一条数据:i like like like java do you like a java //共40个字符通过Ascii码将其转化为对应的二进制形式按照二进制来传递数据,总长度为359(包括空格)通常我们不会这么去做,主要是因为我们要传输的数据太长了,很不划算(2)变长编码我们要传输一条数据:i like like like java do you like a java //共40个字符统计各个字符出现的次原创 2022-04-02 22:52:56 · 1649 阅读 · 0 评论 -
java——力扣刷题小结_01
1、最大子数组和:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23来源:力扣(LeetCode)链接:https://leetcode-cn.原创 2022-03-13 13:06:05 · 1680 阅读 · 0 评论 -
java数据结构——树的实现
一、为什么需要树这样数据结构、1.数组存储方式分析优点:通过下表方式访问元素,速度快。对于有序数组没还可以使用二分查找提高检索速度。缺点:如果要检索某一个具体值,效率比较低下2.链式存储方式分析优点:在一定程度上对数组存储方式进行优化(比如插入一个节点,只需要将插入节点,链接到链表当中可删除的效率也很好)。缺点:在进行检索时,效率仍然比较低,比如(检索某个数值,需要从头结点开始遍历)3.树存储方式分析能提高数据存储,读取的效率,比如利用二叉排序树,既可以保证数据的检索速度。同时也可以保证数据原创 2022-03-27 23:03:43 · 5782 阅读 · 3 评论 -
java数据结构——栈和队列的简单实现
1、栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。public class Stack { private int[] arr; private int flag = 0; public Stack(int原创 2022-03-18 19:50:06 · 633 阅读 · 0 评论 -
java——力扣刷题小结_02
1、链表是否有环官方解法:哈希表public class Solution { public boolean hasCycle(ListNode head) { //新建一个哈希表 Set<ListNode> seen = new HashSet<ListNode>(); //遍历 while (head != null) { //根据哈希表性质,如果有节点添加失败则代表有地址重复,即原创 2022-03-14 21:53:10 · 1486 阅读 · 0 评论 -
算法常用方法整理
String类char charAt(int index)返回指定索引处的 char 值。boolean equals(Object anObject)将此字符串与指定的对象比较。boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写。int length()返回此字符串的长度。String substring(int beginIndex, int endIndex)返回一个新字符串,原创 2022-03-16 11:56:56 · 235 阅读 · 0 评论 -
java数据结构——平衡二叉树、B树、B+树
一、平衡二叉树1、有序二叉树可能存在的问题给一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST)并分析问题所在左边子树全为空,更像是一个链表插入速度没有影响查询速度明显降低,不能发挥二叉树的优势,同时需要每次访问左子树,导致查询速度甚至小于单链表解决方法:平衡二叉树2、平衡二叉树的介绍平衡二叉树具有以下特点:1)它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两颗子树都是一颗平衡二叉树。2)平衡因子: 左子树的高度 - 右子树的高度我们将平衡因子的原创 2022-04-02 17:03:13 · 415 阅读 · 0 评论 -
java排序算法复习——堆排序
堆排序原理图:图源菜鸟教程import java.util.Arrays;public class HeapSort { public static void main(String[] args) { int[] arr = {7,4,6,2,6,8,3,7,1}; for(int p = arr.length-1;p>=0;p--){ heapSort(arr,p, arr.length); }原创 2022-03-13 17:46:00 · 75 阅读 · 0 评论 -
java排序算法复习——基数排序
基数排序原理图:图源菜鸟教程import java.util.Arrays;public class RadixSort { public static void main(String[] args) { int[] arr = {6,4,3,8,1,6,1,76,33}; radixSort(arr); System.out.println(Arrays.toString(arr)); } public static v原创 2022-03-13 16:24:28 · 58 阅读 · 0 评论 -
java——力扣刷题小结_03_滑动窗口
1、无重复字符的最长子串个人解法:HashSet+滑动窗口class Solution { public int lengthOfLongestSubstring(String s) { Set hashset = new HashSet(); int ans = 0; int index = 0; while(index < s.length()){ int temp = index;原创 2022-03-17 10:53:01 · 353 阅读 · 0 评论 -
java排序算法复习——希尔排序
希尔排序:希尔排序是插入排序的优化版,由于插入排序会存在时间浪费的情况,利用分组的思想,对插入排序进行优化代码如下:public class ShellSort { public static void main(String[] args) { int[] arr = {2,6,1,7,4,8,0}; shellSort(arr); System.out.println(Arrays.toString(arr)); } publ原创 2022-03-13 11:20:46 · 624 阅读 · 0 评论 -
排序算法复习——插入排序
插入排序的思想:将数组分为已排序和待排序部分,不断的将值插入到已排序的对应位置代码如下:import java.util.Arrays;public class InsertSort { public static void main(String[] args) { int[] arr = {2,6,1,7,4,8,0}; insertSort(arr); System.out.println(Arrays.toString(arr));原创 2022-03-12 20:47:34 · 303 阅读 · 0 评论 -
java数据结构——链表学习笔记
已经有了数组了,为什么还需要链表?数组的增删改查操作比较麻烦,且内存地址必须连续,限制较多而链表可以实现内存地址不连续,且使增删改查更加便捷下面定义一个节点类Nodepublic class Node { Integer val; //用于保存一个节点的值 Node next; //用来保存下一个节点的地址值,类型是Node,因为其他节点的类型也是Node,只有用Node类型才能储存Node类型的地址 public Node(Integer val){原创 2022-03-12 20:15:41 · 474 阅读 · 0 评论 -
排序算法复习——选择排序
图片来源菜鸟教程选择排序,每次从待排序部分中选择出最小的一个放在最前面(或者最大的放在最后面,这里用的是最小),代码如下import java.util.Arrays;public class SelectSort { public static void main(String[] args) { int[] arr = new int[]{5,7,4,2,0,3,1,6}; selectSort(arr); } public static原创 2022-03-10 12:50:59 · 447 阅读 · 0 评论 -
排序算法复习——冒泡排序
冒泡排序过程图(图源菜鸟教程):冒泡排序的大题思想就是通过不断的两两比较大小,不断的将待排序部分的最大数值交换到最后一个位置。所以外层循环要进行arr.length次而内层循环中存在j+1所以只需要arr.length-1次代码展示:import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { int[] arr = new int[]{5,7,4,2,原创 2022-03-09 20:33:17 · 156 阅读 · 0 评论