数据结构与算法
程序员白总
软件开发工程师
展开
-
leetcode-链表类题目
链表(Linked List)是一种线性表数据结构,他用一组任意的存储单元来存储数据,同时存储当前数据元素的直接后继元素所存放的内存地址。原创 2023-09-06 22:42:07 · 213 阅读 · 2 评论 -
Leetcode -盛最多水的容器
题目链接:https://leetcode-cn.com/problems/container-with-most-water/面积计算:area = (j-i) * min(height(i), height(j))方法一:暴力法,两层循环,时间复杂度O(n^2)class Solution { public int maxArea(int[] height) { int n = height.length; int maxArea = 0;原创 2021-12-16 13:13:22 · 209 阅读 · 0 评论 -
数据结构与算法10:图与图搜索
文章目录图的概念与定义图的表示与存储图的表示邻接矩阵邻接表图的应用拓扑排序最短路径单源最短路径 Dijkstra两点之间最短路径 Floyd最小生成树KruskalPrim图搜索深度优先遍历(depth first search,DFS):广度优先遍历(breadth first search,BFS):隐式图搜索N皇后问题骑士游历问题八数码总结图的概念与定义定义:图由顶点的有穷非空集合和顶...原创 2020-01-17 10:16:45 · 299 阅读 · 0 评论 -
数据结构与算法9:堆与堆排序
文章目录堆堆的定义堆的存储堆的操作堆排序堆堆的定义堆是一个完全二叉树堆中每一个节点的值,都必须大于等于或小于等于其子树中每个节点的值。对于完全二叉树来说,除了最后一层,其他层的节点都是满的,而且最后一层的节点靠左排列,这种性质导致了完全二叉树可以使用数组完美的进行存储。对于每个节点的值都大于等于子树中节点值的堆叫做大顶堆,每个节点都小于等于子树中每个节点的值的堆叫做小顶堆。大顶堆的...原创 2019-12-03 13:44:32 · 241 阅读 · 0 评论 -
数据结构与算法8:树、二叉树及其遍历
文章目录树树的定义树的抽象数据类型树的存储结构二叉树二叉树的遍历树树的定义定义:树是n个节点的有限集。n=0时称为空树。在任何一棵非空树中:(1)有且仅有一个特定的节点称为根节点(root);(2)当n>1时,除根节点外的其他节点可分为m个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,称为根(root)的子树(SubTree)。特点:树是一种一对多的数据结构。...原创 2019-11-29 22:22:32 · 272 阅读 · 0 评论 -
数据结构与算法7:递归&二分查找
文章目录递归(recursion)二分查找二分查找的递归实现二分查找的非递归实现适用场景相关的面试题二分查找的变形问题递归(recursion)递归需要满足的三个条件:1. 一个问题的解可以分解为几个子问题的解2. 这个问题与分解得到的子问题,除了数据规模不同,求解思路完全一样3. 存在递归终止条件递归代码的编写:1. 找到将大问题分解为小问题的规律,基于此写出递推公式2. 推敲...原创 2019-10-16 22:41:34 · 502 阅读 · 0 评论 -
数据结构与算法6:八大排序算法总结
文章目录排序算法的分析角度冒泡排序 bubble sort插入排序 insert sort选择排序 select sort归并排序 merge sort快速排序 quick sort桶排序 bucket sort计数排序 counting sort基数排序 radix sort总结比较排序算法的分析角度执行效率(时间复杂度)最好情况,最坏情况,平均情况时间复杂度及其对应的输入数据比较同...原创 2019-10-16 22:20:33 · 398 阅读 · 0 评论 -
数据结构与算法5:散列表
文章目录散列表的由来散列函数散列冲突及其解决方法开放寻址法 Open Addressing线性探测法 Linear Probing二次探测 Quadratic Probing双重散列 double hashing链表法 Chaining总结相关面试题散列表+链表散列表的由来散列表(Hash Table)由数组拓展而来,利用了数组支持按照下标随机访问数据的特性。我们通过散列函数把元素的键值映射为...原创 2019-10-16 16:54:56 · 276 阅读 · 0 评论 -
数据结构与算法4:操作受限的线性表——队列queue
文章目录定义基本操作实现顺序队列循环队列链式队列循环队列与链式队列的比较队列的应用栈与队列的比较定义队列和栈一样,是一种操作受限的线性表。队列只允许在队头进行删除操作,叫做出队enqueue,在队尾进行插入操作,叫做入队enqueue。是一种先进先出(First In First Out)的线性表,简称为FIFO。基本操作入队列enqueue,在队列末尾插入一个元素。出队列dequeu...原创 2019-10-15 11:04:03 · 843 阅读 · 0 评论 -
数据结构与算法3:操作受限的线性表——栈
文章目录栈(stack)的定义栈的抽象数据类型栈的顺序存储栈的链式存储栈的应用栈(stack)的定义例子弹夹式手枪压入子弹浏览器前进后退键文档图像软件中的撤销操作定义定义:栈(stack)是限定只在表尾进行插入和删除操作的线性表允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈.栈又称为后进先出(Last In Firs...原创 2019-10-12 22:04:41 · 966 阅读 · 0 评论 -
数据结构与算法2:线性表的顺序存储与链式存储
文章目录线性表定义线性表的抽象数据类型(Abstract Data Type)线性表的顺序存储结构线性表的链式存储结构单链表(single linked list)静态链表 (static linked list)循环链表(circular linked list)双向链表(double linked list)链式存储结构与顺序存储结构的比较线性表定义线性表(List):零个或多个数据元...原创 2019-10-09 11:30:23 · 732 阅读 · 0 评论 -
数据结构与算法1:数据结构与算法介绍
文章目录数据结构定义逻辑结构与物理结构抽象数据类型常见的数据结构算法(Algorithm)算法设计的要求算法时空复杂度基本算法推荐书单数据结构定义数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。数据结构阐述了数据的逻辑结构和存储结构及其操作。程序设计的实质:对确定的问题选择一种好的结构,加上设计一种好的算法。程序设计=数据结构+算法基...原创 2019-10-09 10:39:48 · 1036 阅读 · 0 评论 -
牛客网&赛码网 输入输出格式
目录牛客网&赛码网输入输出牛客网单行输入多行输入,每一行是一个测试样例多个测试用例,每个测试用例有多行赛码网单个输入,单个输出单行多个输入,单行多个输出,空格分割多个测试案例,每个测试案例多行牛客网&赛码网输入输出最近面临频繁的笔试,美团和携程的笔试题均在赛码网上进行。如果对赛码网的输入输出格式不熟悉,在做编程题的时候很容易陷入深深的自我怀疑,这里对牛客网和赛码网的编程题输入输...原创 2019-09-04 23:32:35 · 5080 阅读 · 0 评论 -
leetcode-数组之和类题目
1.两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。(1)暴力两层循环class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]...原创 2019-09-22 09:03:25 · 296 阅读 · 0 评论