
数据结构与算法
文章平均质量分 54
LifeBackwards
专注计算机视觉、深度学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
猴子选大王(约瑟夫问题)
有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。原创 2024-03-27 15:42:18 · 437 阅读 · 0 评论 -
堆排序算法及实现
将无序序列建成一个堆,得到关键字最小(或最大)的记录;输出堆顶的最小(或最大)值后,使剩余的n-1个元素重又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫堆排序。原创 2023-12-11 17:44:43 · 532 阅读 · 0 评论 -
链表基本操作
单链表结构头指针是指向链表中第一个结点的指针首元结点是指链表中存储第一个数据元素a1的结点头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息单链表存储结构定义:typedefstructLnodeElemTypedata;//数据域structLNode*next;//指针域LNode,*LinkList;// *LinkList为Lnode类型的指针。原创 2023-09-18 14:20:52 · 291 阅读 · 0 评论 -
hanoi塔问题
n阶Hanoi塔问题,假设有3个分别命名为A、B、C塔座,在塔座A上插有n个直径大小各不相同、依小到大的圆盘。(3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。(3)用 A 做过渡,将 B 的 (n-1) 个移到 C。(1)用 C 柱做过渡,将 A 的(n-1)个移到 B。(2)圆盘可以插在A、B、C的任意一个塔座上;n = 1,则直接从 A 移到 C。(2)将 A 最后一个直接移到 C。(1)每次只能移动一个圆盘;原创 2023-09-25 13:30:58 · 229 阅读 · 0 评论 -
数据结构-共享栈
两个栈顶指针重合时,表示共享栈已经满了。原创 2023-09-07 16:22:39 · 389 阅读 · 0 评论 -
数据结构之映射
目录映射Map接口定义基于链表的映射实现基于二分搜索树的映射实现映射的复杂度分析有序映射和无序映射多重映射映射映射概念的实现:dict key value 字典 单词 释义 名册 身份证号 人 车辆管理 车牌号 车 数据库 id 信息 词频统计 单词...转载 2019-04-15 20:53:30 · 1213 阅读 · 0 评论 -
数据结构之集合详解
目录集合(set)一个以二分搜索树为底层实现的集合一个以链表为底层实现的集合集合的时间复杂度分析唯一摩尔斯密码词 LeetCode804号问题有序集合和无序集合多重集合集合(set)回忆我们之前实现的二分搜索树,它是不能存放重复元素的,它本身就是非常好的实现“集合”的底层数据结构Set<E>void add(E) 不能添加重复元素...转载 2019-04-15 20:47:42 · 321 阅读 · 0 评论 -
数据结构之二分搜索树
目录二叉树二分搜索树 Binary Search Tree手写一个二分搜索树二分搜索树的前序遍历二分搜索树的中序遍历二分搜索树的后序遍历前序遍历的非递归算法二分搜索树的层序遍历二分搜索树删除节点两个数组的交集问题两个数组的交集 II二叉树和链表一样,动态数据结构class Node{ E e; Node left;...转载 2019-04-15 20:43:21 · 264 阅读 · 0 评论 -
数据结构知识点汇总
目录八种常见数据机构数据结构优缺点数据结构的基本功能八种常见数据机构数组Array 栈Stack 队列Queue 链表LinkedList 树Tree 哈希表Hash 堆Heap 图Graph数据结构优缺点数据结构 优点 缺点 数组 插入快 查找慢,删除慢,大小固定,只能存储单一元素 有序数组 比无序数组查询...转载 2019-04-14 09:19:23 · 974 阅读 · 0 评论 -
数据结构之栈详解
目录栈栈的应用栈的实现栈的时间复杂度栈的应用使用栈解决有效的括号问题(LeetCode第二十号问题)栈栈也是一种数据结构 相比数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从一端取出元素 这一端称为栈顶 栈是一种后进先出的数据结构 Last In First Out(LIFO) 在计算机的世界里,栈拥有着不可思议的作用栈的应用...原创 2019-04-14 20:19:32 · 579 阅读 · 1 评论 -
十大经典排序算法
文章目录冒泡排序 算法步骤 动图演示 什么时候最快 什么时候最慢 Java代码实现 选择排序 算法步骤 动图演示 Java 代码实现 插入排序 算法步骤 动图演示 Java 代码实现 希尔排序 算法步骤 Java 代码实现 归并排序 算法步骤 动图演示 Java 代码实现 快速排序 算法步骤 动图演示...转载 2019-04-15 21:21:50 · 440 阅读 · 0 评论 -
数据结构之堆和优先队列
目录优先队列为什么使用优先队列?优先队列不同底层实现复杂度分析堆的基本结构实现一个底层数组的最大堆向堆中添加元素和Sift Up取出堆中的最大元素和Sift Down基于堆的优先队列优先队列的经典问题 LeetCode347d 叉堆 d-ary heap(用的不多)索引堆(了解)二项堆(了解)斐波那契堆(了解)广义队列优先队列普通队列...转载 2019-04-15 21:01:28 · 306 阅读 · 0 评论 -
数据结构之线段树
目录线段树(区间树)Segment Tree线段树的概念为什么要使用线段树手写一个线段树线段树中的区间查询线段树问题 LeetCode303LeetCode307对区间进行操作的时间复杂度线段树(区间树)Segment Tree线段树的概念线段树是一种特殊的树结构。这种数据结构主要用于解决“线段”或者是“区间”这种特殊的数据线段树是一种二叉搜...转载 2019-04-15 21:12:03 · 1120 阅读 · 0 评论 -
数据结构-顺序表
数据结构动态数组实现原创 2019-04-14 09:34:50 · 1041 阅读 · 1 评论 -
Java面试之数据结构篇
Java面试之数据结构篇目录 博客链接 数据结构知识点汇总 https://blog.youkuaiyun.com/daodaipsrensheng/article/details/89292866 数据结构之数组详解 https://blog.youkuaiyun.com/daodaipsrensheng/article/details/89292887 数据结构之栈详解 ...转载 2019-04-14 09:35:23 · 535 阅读 · 0 评论 -
数据结构之队列详解
目录队列Queue队列的实现队列的时间复杂度循环队列的时间复杂度队列Queue队列也是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结构 First In First Out(FIFO)队列的实现接口Queue:/*** Created by binzh...转载 2019-04-14 20:45:29 · 370 阅读 · 0 评论 -
C++中指针和引用区别
一、《程序员面试宝典》的解释是:(1)非空区别。在任何区别下都不能使用指向空值的引用,但指针可为空。一个引用必须总是指向某些对象。不存在指向空值的引用这个事实意味着使用引用的代码效率 比使用指针要高。(2)合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。(面试宝典上可能写反了?)(3)可修改区别。指针与引用的另一个重要的区别是指针可以转载 2016-10-12 20:46:28 · 512 阅读 · 0 评论 -
栈的操作
#include#include#include#includeusing namespace std;typedef struct student{ int data; struct student *next;}node;typedef struct stackqueue{ node *base,*top;}queue;转载 2016-09-19 21:31:27 · 392 阅读 · 0 评论 -
快速排序
一、快速排序基本思想设无序数组a[low...high],利用分治法快速排序的基本思想如下:1)分解在a[low...high]中任选一个记录作为基准pivot,以此基准将当前无序区划分为左、右两个较小的子区间a[low...pivotpos-1]和a[pivot+1...high],并使左边子区间中所有数字a[i]均小于等于基准pivot,右边子区间中所有数字a[j]均大于等于piv原创 2016-08-14 17:45:58 · 295 阅读 · 0 评论 -
冒泡排序算法
冒泡排序是稳定排序,最差、平均时间复杂度是O(n2);最好是O(n)#include#includevoid bubbleSort(int *list){ int i,j,temp; for(i=0;i原创 2016-09-19 21:39:31 · 434 阅读 · 0 评论 -
层次遍历二叉树
问题(假定根节点位于第0层)1. 层次遍历二叉树(每层换行分开)2. 层次遍历二叉树指定的某层本文转自http://www.cnblogs.com/kaituorensheng/p/3558645.html1. 层次遍历二叉树指定的某层可以得出这样的一个结论:遍历二叉树的第k层,相当于遍历二叉树根节点的左右子树的第k-1层。这样一直遍历下去,直到k=转载 2016-09-20 11:29:48 · 3660 阅读 · 1 评论 -
KMP字符串模式匹配算法
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一.简单匹配算法先来看一个简单匹配算法的函数://在字符串中查找指定字符串的第一次出现,不能找到则返回-1 int strstr(char *S, char *T) {转载 2016-09-23 11:39:07 · 3635 阅读 · 0 评论 -
二分查找
二分查找优点是比较次数少,查找速度快,平均性能好,时间复杂度为O(lgn); 其缺点是要求待查表为有序表,且插入删除困难。因此,二分查找适用于不经常变动而查找频繁的有序列表。int binary_search(int* a, int len, int goal) { int low = 0; int high = len -1; whi原创 2016-09-23 19:24:25 · 302 阅读 · 0 评论 -
散列表详解
散列表(也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)的比较操作。 散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素,因而必须要在数据元素的存储位置和它的关键字(可用key表示)之间建立一个确定的对应关系,使每个关键字和散列表中一个唯一的存储位置相对转载 2016-09-20 21:26:19 · 653 阅读 · 0 评论 -
最长公共子序列LCS
一、问题描述 什么是最长公共子序列呢?好比一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。 举个例子,如:有两条随机序列,如 1 3 4 5 5 ,and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。 注意最长公共子串(Longest CommonSubstring转载 2016-09-24 15:06:13 · 363 阅读 · 0 评论 -
希尔排序
希尔排序,又称为“缩小增量排序”。一、基本思想先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2例如,给定关键字:49,38,65,97,76,13,27,48,55,4,示意图如下:二、实现代码#include#includeusing namesp原创 2016-09-21 17:47:47 · 451 阅读 · 0 评论 -
推荐几个技术大牛的博客
1. Java webhttp://www.cnblogs.com/xdp-gacl/category/574705.html2. july的博客很有名http://blog.youkuaiyun.com/v_JULY_v3.java 基础、框架https://www.cnblogs.com/xdp-gacl/p/4249939.html原创 2016-09-27 15:03:27 · 2666 阅读 · 0 评论 -
栈:括号配对算法
算术表达式中左右括号匹配的次序正好符合“后到先匹配”规则,符合栈操作特点,可以借助栈来判断。3)左括号多于右括号;4)左右括号匹配正确。3)表达式检验结束时,若栈空,表达式中匹配正确,否则“左括弧”有余。1)左右括号配对次序不正确;2)右括号多于左括号;2)凡出现右括弧,首先检查栈是否空。1)凡出现左括弧,则进栈;原创 2016-09-28 09:38:53 · 1637 阅读 · 1 评论 -
判断单链表是否有环
使用追赶的方法,设定两个指针slow、fast,从头指针开始,slow每次前进1步,fast每次前进2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。int existsLoop(list *head){ list *slow = head, *fast = head; while (slow != NULL && fast != NULL) {原创 2016-10-05 16:14:54 · 324 阅读 · 0 评论 -
回文检查
一、判断一个整数是不是回文bool IsPalindromeInt(int N){ int reverse=0,rem,temp = N; while(temp!=0) { rem=temp%10; reverse=reverse*10+rem; temp/=10; } if(rev原创 2016-10-06 21:22:32 · 625 阅读 · 0 评论 -
整数字符串之间的转化
字符串转化为整数加 '0';整数转化为字符串 '0',再逆序。1. 字符串转化为整数public class String2Int{ public static void main(String[] args){ int i = 0; int j=0; int sum=0; int sum1=0; char[] a={'1','2','3','4','5',原创 2016-09-23 17:38:34 · 462 阅读 · 0 评论 -
Java面试总结
Java面试总结分类 总结博客快速导航 Java面试之基础篇 https://blog.youkuaiyun.com/daodaipsrensheng/article/details/89151674 Java面试之集合篇 https://blog.youkuaiyun.com/daodaipsrensheng/article/details/89157828 Java面试之...转载 2019-04-09 15:46:55 · 234 阅读 · 0 评论 -
C++实现单链表的逆置
#include using namespace std; const int N=6; typedef struct node{ //单链表 int data; struct node* next; }LinkedNode; /****由数组创建单链表****/ LinkedNode *CreateList(int a[N]) {转载 2016-09-19 20:14:42 · 3012 阅读 · 0 评论