数据结构--算法
文章平均质量分 88
HLA_胡
2016.06-2019.08 猫眼电影
2019.08-至今 头条西瓜视频
展开
-
数据结构---排序算法
内排序:数据记录在内存中,所有排序操作都在内存中完成;外排序:由于数据太大,内存一次不能容纳全部的排序记录,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;衡量排序算法的优劣:时间复杂度:它主要是分析关键字的比较次数和记录的移动次数。空间复杂度:分析排序算法中需要多少辅助内存。稳定性:若两个记录A和B的关键字值相等,排序后A,B的先后次序保持不原创 2015-05-24 20:13:15 · 825 阅读 · 0 评论 -
数据结构---二叉树(4)
二叉树相关问题集:1. 求二叉树中的节点个数2. 求二叉树的深度3. 前序遍历,中序遍历,后序遍历4. 分层遍历二叉树(按层次从上往下,从左往右)5. 将二叉查找树变为有序的双向链表6. 求二叉树第K层的节点个数7. 求二叉树中叶子节点的个数8. 判断两棵二叉树是否结构相同9. 判断二叉树是不是平衡二叉树10. 求二叉树的镜像11. 求二叉树中两个节点的最低公共祖先...原创 2015-09-07 17:08:22 · 679 阅读 · 0 评论 -
数据结构---数组(3)
1、寻找最小的K个数(剑指offer-30)题目:输入n个整数,输出其中最小的K个数例如,输入1、2、3、4、5、6、7、8这8个数字,则最小的4个数字为1、2、3、4。解题思路一:我们通过快排找到第k个数,然后比他的小的都在左边,比他大的都在右边。 // 一次快速排序 public static int Partition(int arr[], int low, int原创 2015-09-02 20:32:50 · 465 阅读 · 0 评论 -
数据结构---数组(4)
1、把数组排成最小的数(剑指offer--33)问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可。这里注意的是字符串的比较函数需要重新定义,不是比较a和b,原创 2015-09-03 20:29:33 · 480 阅读 · 0 评论 -
数据结构---抽象建模
1、n个骰子的点数(剑指offer--43)题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。首先解决前提性的问题:一个骰子的点数只可能是[1,6],所以S的值的取值范围是[n,6n],这里当然只考虑整数。思路一:统计各个S值出现的次数,然后各个S值出现的概率 = 各个S值出现的次数 / n个骰子所有点数的排列数。其中,n个骰子所有原创 2015-09-05 21:50:35 · 1881 阅读 · 0 评论 -
数据结构---数组(5)
1、数字在排序数组中出现的次数(剑指offer--38)题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.思路:用二分查找,分别找出第一个3,和最后一个3的位置,然后计算个数。 public static int getLower(int arr[], int key) { int l原创 2015-09-04 12:53:03 · 459 阅读 · 0 评论 -
B树、B-、B+、B*树
1、B树(或B-树、B_树)定义:是一种平衡的多路查找树,称为B树(或B-树、B_树)。B 树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树。B-树结构特性:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:1、树中每个结点最多含有m个孩子(m>=2);2、除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子(其中ceil(x)是一个取上限的函数)原创 2015-07-06 09:28:36 · 1866 阅读 · 0 评论 -
数据结构---字符串(2)
1、把字符串转换为整数题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。本题目不是很难,但有几个注意事项1.要判断输入字符串是否有效,即判断输入字符串是否为空和判断字符串中有没有其他非数字的字符2.判断字符串开头是否带有符号,例如输入“+123”,结果为“123”,输入“-123”,结果为“-123”3.输入正常时,开始原创 2015-09-06 18:28:20 · 580 阅读 · 0 评论 -
数据结构---二叉树(1)
1. java实现二叉树//使用二叉链表实现二叉树public class BinaryTree { // 结点类 static class Node { int value; // 该节点存储的值。 Node leftChild; // 指向左子节点的引用。 Node rightChild; // 指向右子节点的引用。 Node(int value) { ...原创 2015-07-28 21:55:07 · 450 阅读 · 0 评论 -
数据结构---字符串(1)
1. 替换空格(剑指offer-4)题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。解题思路:1.我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。原创 2015-07-27 11:30:28 · 506 阅读 · 0 评论 -
KMP算法--字符串模式匹配算法
字符串模式匹配:求一个字符串(模式串)在另一个字符串(主串)中的位置,称为字符串模式匹配KMP算法时间复杂度:O(n+m)核心思想:当一趟匹配过程中出现字符不匹配时,不需要回溯主串的指针,而是利用已经得到的“部分匹配”,将模式串尽可能多地向右“滑动”一段距离,然后继续比较。1.暴力算法public static int kmpMatch(String s, String t){...原创 2019-07-13 21:40:01 · 479 阅读 · 0 评论 -
数据结构---数组(2)
1.顺时针打印矩阵(剑指offer-20)题目:给定一个矩阵,从外向内顺时针打印矩阵中的每一个数字。例如:给定矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16输出应该为:{1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10}解析:1.循环条件怎么判定?一个矩阵,给定起原创 2015-07-30 15:53:31 · 441 阅读 · 0 评论 -
数据结构---递归
递归算法:是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序原创 2015-06-02 11:09:13 · 695 阅读 · 0 评论 -
数据结构---栈
栈是一种后进先出的结构通常有两种实现方式1.静态数组或者动态数组的实现方式2.链表的实现方式。运用到栈的算法有哪些呢:括号匹配问题,中缀表达式转后缀表达式问题,迷宫路径搜索问题,非递归遍历问题,回溯搜索问题,递归转非递归。1.栈的实现1.1 java数组实现/* * 用java数组实现简单的栈 * */public class StackX { priv原创 2015-05-28 10:57:11 · 582 阅读 · 0 评论 -
数据结构---单链表(1)
1. 单链表1.1 java实现先定义一个Node类用来存储节点的值域和指针域 public class LNode { protected int data; protected LNode next; public LNode(int data) { this.data = data; }} 定义一个链表主类,并且定义各种对链表操作的方法 //带头结点的单链原创 2015-07-27 19:40:52 · 427 阅读 · 0 评论 -
数据结构---单链表(2)
1. 反转链表(剑指offer-16)题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。解法一:从头到尾遍历原链表,每遍历一个结点,将其摘下放在新链表的最前端。注意链表为空和只有一个结点的情况。时间复杂度为O(n)。 //链表反转 public LNode ReverseList(LNode head){ // 如果链表为空或只有一个结点,无需反转原创 2015-07-27 21:46:05 · 578 阅读 · 0 评论 -
数据结构---位运算
1. java 位运算简介在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (l)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。1)左移位运算符(能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。2)“有符号”右移原创 2015-07-29 17:21:51 · 476 阅读 · 1 评论 -
数据结构---二叉排序树(BST)
1、二叉排序树简介二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3. 它的左、右子树也分别为二叉排序树。二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个原创 2015-08-10 20:32:12 · 1134 阅读 · 0 评论 -
数据结构---数的操作
1.数值的整数次方(剑指offer-11)题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解析:这道题目有以下几点需要注意:1.0的0次方是无意义的,非法输入2.0的负数次方相当于0作为除数,也是无意义的,非法输入3.base如果非0,如果指数exponent小原创 2015-07-29 20:53:59 · 508 阅读 · 0 评论 -
数据结构---二叉树(2)
1.树的子结构(剑指offer-18)题目:输入两棵二叉树A和B,判断B是不是A的子结构。解析:要查找树A中是否存在和树B结构一样的子树,可以分成两步:第一步在树A中找到和B的根节点的值一样的结点R;第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。第一步在树A中查找与根结点的值一样的结点,这实际上就是树的遍历。递归调用HasSubTree遍历二叉树A。如果发现某原创 2015-07-30 10:44:21 · 397 阅读 · 0 评论 -
数据结构---单链表(3)
1.复杂链表的复制题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:struct ComplexNode{ int m_nValue; ComplexNode* m_pNext; ComplexNode* m_pSibling;};以下图为5个原创 2015-07-31 10:51:56 · 433 阅读 · 0 评论 -
数据结构---数组(1)
1. 二维数组中的查找(剑指offer3)题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:从二维数组的右上角(或左下角)的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则原创 2015-07-27 10:14:42 · 523 阅读 · 0 评论 -
数据结构---二叉树(3)
1.二叉树中和为某一值的路径题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解析:这道题考查对二叉树遍历方式的理解,采用先序遍历,如果把二叉树看成图,就是图的深度遍历。使用变量存放当前遍历的路径和,当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。如果当前结点为叶结点并且当前路原创 2015-07-30 21:19:17 · 425 阅读 · 0 评论 -
算法-面试题整理
算法 解答 动态规划 0-1 背包问题 背包: 容量N 物品i:容量w[i] 和 价值v[i] https://blog.csdn.net/a_b_c_d_e______/article/details/81512036 dp[i][j] : 前 i 件物品体积不超过 j 的情况下能达到的最大价...原创 2019-08-19 16:59:09 · 144 阅读 · 0 评论