
数据结构与算法
文章平均质量分 91
学习数据结、算法等课程的总结,以及遇到的面试题记录
祈望每天自然醒
站在巨人的肩膀上看世界会很美好
展开
-
数据结构与算法(九) - 六大常用算法思想(贪心、分治、回溯、动态规划、枚举、分支界限)
数据结构与算法(九)-六大常用算法思想1.贪心算法思想greedy algorithm,又称贪婪算法。是一种在每一步选择中都采取在当前状态下最好或最优的选择。是对问题产生整体最优解或者是整体最优解的近似解。贪心算法在最优子结构的问题中最尤为效。1.1 基本思路建立数学模型来描述问题。把求解的问题分成若干个子问题。对每一子问题求解,得到子问题的局部最优解。把子问题的解局部最优解合成原来解问题的一个解。最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。原创 2021-06-30 18:27:49 · 7968 阅读 · 3 评论 -
数据结构与算法(八) - 堆、图、字符串匹配算法(BF,RK)
数据结构与算法(八)-堆、图、字符串匹配算法1.堆(Heap)1.1 堆的定义1、堆是一颗完全二叉树;(处理)2、堆中的某个结点的值总是大于等于或小于等于子树的任意节点的值。3、堆中每个结点的子树都是堆树。1.1.1 堆的分类大顶堆:堆中的任意节点值大于等于子树的任意节点值小顶堆:堆中的任意节点值小于等于子树的任意节点值1.1.2 堆的存储结构堆的存储一般使用数组来进行存储,数组顺序存储堆。因为堆是完全二叉树,所以它满足i(i>1)节点的父节点下标为(i-1)/2 ,同原创 2021-06-28 18:27:23 · 522 阅读 · 1 评论 -
数据结构与算法(七) - 二叉查找树/平衡二叉查找树/红黑树
数据结构与算法(七)-查找树1.二叉查找树1.1 定义与特点定义二叉查找树可以是一棵空树,具有如下特性:(左<根<右)若根节点的左子树不为空,则左子树上所有节点的值均小于根节点的值;若根节点的右子树不为空,则右子树上所有节点的值均大于根节点的值;根节点的左右子树也都分别是二叉查查找树.没有键值相等的节点特点对二叉排序树进行中序遍历,可以得到一个由小到大的有序序列.1.2 结构实现1.定义节点public class Node { //定义值 publ原创 2021-06-24 22:09:11 · 363 阅读 · 1 评论 -
数据结构与算法(六) - 二叉树与树
数据结构与算法(六)-二叉树与树1.树的基本概念术语包括:术语描述根节点子节点叶子节点度为0的节点边路径节点高度深度-1层级根节点的层数为1,依次递增深度节点的最大层数度节点所也有的子树的个数下面通过几个图解释树的几个比较重要的概念:边、根节点、叶子节点路径节点高度叶子节点高度为02. 二叉树2.1 二叉树的定义二叉树是n(n>=0)个节点的有限集,它或为空树(n=0),或有一个根节原创 2021-06-24 22:05:12 · 351 阅读 · 1 评论 -
数据结构与算法(五) - 查找算法
数据结构与算法(五)-查找算法1.顺序查找1.1 数组顺序查找就是逐一对比,发现有相同的值,就返回下标。迭代public int seqSearch(int[] arr, int entry){ int index = 0; while (index < arr.length){ if(entry == arr[index]) return index; index++; }//end while ret原创 2021-06-20 19:55:01 · 504 阅读 · 0 评论 -
数据结构与算法(三) - 递归算法
数据结构与算法(三)-递归算法Recursion,递归是一种常用的算法,也可以称为一种编程技巧。在后续数据结构与算法的编码过程中都要使用到递归,比如DFS深度优先,二叉树前中后序遍历等。1. 概念程序调用自身的编程技巧称为递归( recursion),所有的递归问题都可以使用递推公式来表示。构成递归需具备的条件:子问题须与原始问题为同样的事,且更为简单;不能无限制地调用本身,须有个出口,化简为非递归状况处理。下面举一个例子帮助理解递归:例:儿问其父:吾之十八代祖名何?其父不明,父问其父原创 2021-06-14 22:30:23 · 832 阅读 · 6 评论 -
数据结构与算法(四) - 十大排序算法
数据结构与算法(三)-常用算法温馨提示:配合LeetCode题一起理解这些算法更有效哦~附上:https://leetcode-cn.com/problemset/all/一、递归算法Recursion,递归是一种常用的算法,也可以称为一种编程技巧。在后续数据结构与算法的编码过程中都要使用到递归,比如DFS深度优先,二叉树前中后序遍历等。1. 概念程序调用自身的编程技巧称为递归( recursion),所有的递归问题都可以使用递推公式来表示。构成递归需具备的条件:子问题须与原始问题为同原创 2021-06-14 21:10:47 · 1994 阅读 · 4 评论 -
数据结构与算法(二) - 复杂度分析
数据结构与算法(二)-复杂度分析为什么要进行复杂度分析?和性能测试相比,复杂度分析有不依赖于环境,成本低,效率高,易操作,指导性强的特点.掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本.1.时间复杂度1.1 大O表示法假如有一段代码:public void print(int n){ int a = 1; //执行1次 for(int i=0;i<n;++i){//执行n次 System.out.println(a+i);//原创 2021-06-13 17:04:33 · 346 阅读 · 0 评论 -
数据结构与算法(一) - 常用容器的了解
数据结构与算法(一)-常用容器的了解需要先学习一些Java的基础,另外此篇文章是为了之后的算法做铺垫什么是数据结构和算法:数据结构包括数据对象集以及他们在计算机中的组织方式,即它们的逻辑结构和物理存储结构,一般我们可以认为数据结构指的是一组数据的存储结构。算法就是操作数据的方法,即如何操作数据效率更高,更节省资源.## 1.数组1.1 概述数组是一种线性表结构,它用一组连续的内存空间,来存储具有相同类型的数据。在Java中数组的创建方式有3种://1.直接创建并且赋值int[] a原创 2021-06-13 16:59:21 · 1502 阅读 · 1 评论 -
算法 - 摩尔投票法(Boyer-Moore majority vote algorithm)
数据结构 - 摩尔投票法(Boyer-Moore majority vote algorithm)对应练习题目: 初级:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/ 进阶:https://leetcode-cn.com/problems/majority-element-ii/1. 摩尔投票法摩尔投票算法也可以叫做多数投票算法,本文全部使用Java代原创 2021-05-18 21:36:44 · 439 阅读 · 1 评论