随笔分类 - 数据结构与算法
摘要:网格,最左上角顶点的坐标是(1,1),机器人从(1,1)出发,一次走一格,只能往下或往右走,问到(x,y)有几种走法? 设f(x,y)是到(x,y)的走法总数,则 当x = 1时,f(x,y) = 1 当y = 1时,f(x,y) = 1 当x >1 且 y > 1时,f(x,y) = f(x -1
阅读全文
摘要:1 2 3 4 5 6 7 8 9 顺时针旋转90度 7 4 1 8 5 2 9 6 3 解题方法: (1)上下颠倒: 7 8 9 4 5 6 1 2 3 (2)反斜杠对角线折叠 7 4 1 8 5 2 9 6 3 代码:
阅读全文
摘要:(1)数是整数 排好序,查重。nlogn,参考(2) 利用哈希表,时间复杂度n 找出最大值和最小值,如果数组长度大于二者差,必然有重复。 如果数组长度小于二者差: 最大值不是太大的情况下,可使用bitmap和位运算,实现哈希表,然后扫描数组,填写哈希表的每一个bit。 最大值很大的情况下,利用哈希函
阅读全文
摘要:草草草!!! 在数组的符合某种条件的所有元素中找到的最小的元素。 利用选择排序的原理保存最小元素的索引的方法查找最小值,记得!第一个索引设置成符合要求的元素的索引,不要随便设置成数组的第一个元素的索引。 24 -- 38行代码。 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则
阅读全文
摘要:一个整型数组,有n个元素,可以含有重复元素。 查找该数组中最小的k个数。 (1)对数组快速排序,然后从前往后依次挑出最小的k个元素,时间复杂度:nlogn + k = nlogn (2)设置一个容量是 k 的临时数组,扫描目的数组,如果临时数组元素个数小于k,直接填入临时数组,如果临时数组元素个数大
阅读全文
摘要:整型数组,求连续子序列和的最大值。 如 -1 , 3, -4,7 结果是7 ***** -1 ,4,-2,7 结果是 8。 分析: 利用动态规划,设f(i) 是以第 i 位结尾的所有序列中和最大的序列的值。 有: f(i) = a[i] 当a[i] <= 0 f(i) = a[i] + f(i-1)
阅读全文
摘要:我们知道,对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即
阅读全文
摘要:1 一个数组,始终保持最大/最小的元素在a[0]单元,该数组可以追加元素,可以随时取走a[0]这个最大/最小元素. 2 解决思路:保证数组a[0]始终存放最大/最小元素,且数组整体分布特征满足一定条件,使得在数组元素发生变化时,在最少的时间内使得a[0]仍是最大/最小元素. 3 牵扯3个问题: 4 (1) 给一个随机分布的无序数组,怎样把数组元素的位置调整成a[0]是最大元素,且初...
阅读全文
摘要:1 复习时,手画一棵查找树,亲自摸清查找树的各操作 2 二叉查找树的定义 3 一颗空树或该非空树满足: 4 1,若有左子树,左子树的所有节点小于根节点 5 2,若有右子树,右子树的所有节点大于根节点*/ 6 /*二叉查找树的一些性质 7 1.查找某个关键字的比较次数最多是树的深度, 8 模拟过程是从树根往下沿着 9 某一路径走到叶子结点。查找性能取决于树的...
阅读全文
摘要:前言:搞懂非递归和递归三种遍历,二叉树的90%的问题算你全搞定了。 先序遍历:根,左子树,右子树 中序遍历:左子树,根,右子树 后序遍历:左子树,右子树,根 先序遍历序列的特点:ABCDEFGHIJK A是树根,左子树可能是BCDEFGH右子树可能是IJK 对于B左子树可能是CD,右子树可能是EFG
阅读全文
摘要:09 void CreateTree(BiTree *T) { 10 char ch; 11 scanf("%c",&ch); 12 if(ch == '#') { 13 *T = NULL; 14 return; 15 } 16 else { 17 *T = (BiTree)malloc(size
阅读全文
摘要:斐波那契数列 f(0) = 0; f(1) = 1.......f(n) = f(n-1) + f(n - 2)
阅读全文
摘要:要想明白堆排序,首先要明白堆和数组是等价的本质,还要熟悉完全二叉树的性质。 有关完全二叉树的性质 http://www.cnblogs.com/joyeehe/p/7865578.html 最大堆排序源码: 注意:假设待排序数组是a[101],此程序,对索引1到101的单元排序,不处理a[0],因为
阅读全文
摘要:想明白快速排序,首先得解决这个问题: 一个无序数组,怎样调整数组各个单元的值,使得数组满足:a[0] 在数组中的某个位置,该位置的左边所有元素都不大于a[0],该位置右边的所有元素都不小于a[0] . 该程序执行步骤的简单说明: (1)先用一个临时变量temp保存第一个元素 (2)两头扫描找出小于和
阅读全文
摘要:n是偶数 n是奇数 i是叶子结点(i)无孩子 i>n/2 i>n/2 i有两个孩子 i<n/2 i<=n/2 i有1个孩子(且是左孩子) i=n/2 无 i有左孩子 i<=n/2 i<=n/2 i有右孩子 i<n/2 i<=n/2 i有左兄弟 一定有 一定有 i有右兄弟 i+1 <= n i+1 <
阅读全文
摘要:最坏时间复杂度,最佳时间复杂度,平均时间复杂度都是O(n^2) 相比冒泡排序的优势是 每次扫描只保存索引,并不交换,节省了时间。但是冒泡排序可以设置标志位提前结束排序,较于选择排序也节省了时间。 一次性放到终态位置:是 稳定性:稳定;前提是 if ( a[ j ] >= a[ k ] ) k = j
阅读全文
摘要:初稿:2017-11-19 19:53:08 最坏时间复杂度:O(n^2)每一趟都发生交换,持续了array.len-1趟,每一趟的每个单元都发生交换。 最佳时间复杂度:O(n) 原数组是有序数组或基本有序,只扫描一趟。 平均时间复杂度是O(n^2) 稳定性:稳定 一次性放到终态位置: 是 适用:大
阅读全文
摘要:初稿:2017-11-19 19:27:06 利用数组模拟的栈: 初始化 top = -1; 入栈 stack[++top] = elem ; 出栈 --top; 栈满 top == STACK_SIZE - 1; 栈空 top == -1 利用单链表模拟的栈: 参数只需要头结点即可,每个入栈元素
阅读全文
摘要:初稿:2017-11-19 14:12:20 循环队列:本质是数组,采用循环方式,可以避免随着进队入队造成的空间浪费。 知识点:N个连续的存储单元,第一个单元编号是0,最后一个单元是N-1; i代表任意一个单元的编号,++i % N能实现i的值从0走到N-1再自动回到0,依次循环往复。 队空:rea
阅读全文

浙公网安备 33010602011771号