数据结构与算法
文章平均质量分 50
数据结构以及算法可以粗略等于程序,足以可见Data Structure与Algorithm对于编程的重要性,用这个专栏记录笔者在成长过程中的所学所思所想
雷小c
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
根据后序遍历数组生成一棵搜索二叉树
具体思想画个图就行:code1:找分界处位置用顺序查找// 节点的类型 struct TreeNode { TreeNode* left; TreeNode* right; int val; TreeNode(int value) : val(value), \ left(NULL), right(NULL) {}};// declarationTreeNode* process(int*, int, int);/** postArrToBST* @pa原创 2021-02-17 15:42:41 · 375 阅读 · 0 评论 -
纸条折痕(对折N次)打印问题
问题描述:把一段纸条竖放在桌子上,然后从纸条的下边向上方对折一次,压出折痕后展开。此时折痕是凹下去的。如果从纸条的下边向上方连续对折两次,压出折痕后展开,此时有三条折痕,从上到下依次是凹、凹、凸。给定一个参数N,代表纸条从下到上连续对折N次。请从上到下打印所有折痕的方向。eg:N = 1,打印down; N = 2,打印down、down、up。这个问题动手试验就能发现规律。code:#include <iostream> // declarationvoid pr.原创 2021-02-17 12:08:32 · 1113 阅读 · 0 评论 -
算法时间复杂度之master公式
master公式是相对于递归算法而言:递推公式为:T(N) = a * T(N / b) + O(Nd)有下面的结论:如果记不住,手推一下就行。原创 2021-02-17 11:04:10 · 442 阅读 · 0 评论 -
构造数组arr,满足:对于任意 i < k < j ,arr[i] + arr[j] != 2 * arr[k]
题目描述:构造长度为N的数组arr,此数组需要满足: 对于任意 i < k < j ,arr[i] + arr[j] != 2 * arr[k] 。这里有个前提:对原数组做奇变换和偶变换,也达标,可以证明的。见下面:其实加1、加2、减100等等这种变换也能够达标,那为啥要奇偶变换呢?因为好做啊,想象我们要扩大数组,如果我们前面拿一个达标的奇数数组,后面拿一个达标的偶数数组, (一个odd + 一个even 一定不会等于 2 * 一个num )的。所以,拼接起来的大数组一定是.原创 2021-02-17 10:52:52 · 534 阅读 · 0 评论 -
随机函数等概率返回问题
问题描述:给定一个随机函数f,等概率返回1~5中的一个数字,这是唯一可以是使用的随机机制,如何实现等概率返回1~7中的一个数字。给定一个随机函数f,等概率返回a~b中的一个字母,这是唯一可以是使用的随机机制,如何实现等概率返回a~d中的一个数字。对于此类问题:二进制调整去拼。给出一般的解法:代码:#include <iostream> // std::cout #include <stdlib.h> // rand() srand() RAND_M.原创 2021-02-16 16:27:41 · 594 阅读 · 0 评论 -
直方图装水的格数最大问题
问题描述:给定一个正整数数组arr,把arr想象成一个直方图。 返回这个直方图如果装水,最多能装下几格水?/** 题目描述:给定一个正整数数组arr,把arr想象成一个直方图。 * 返回这个直方图如果装水,能装下几格水? */#include <iostream>#include <algorithm>namespace cc_01_histogramWater{/** 直方图装水解法1:每次遍历到一个位置,求出左边最大与右边最大。 *.原创 2021-02-16 12:54:20 · 286 阅读 · 0 评论 -
十大排序算法的比较与分析
十大排序算法已经全部总结在博客里。基于比较的排序冒泡排序选择排序插入排序希尔排序归并排序快速排序堆排序非基于比较的排序桶排序、基数排序与计数排序关于十大排序算法的比较,无非就是算法原理、算法时空复杂度、算法稳定性这些内容,具体的已经全部写在博客里,见上面的超链接。最后,所有的算法和测试代码:** Author: Ray** Email: xuanlei@seu.edu.cn** Date: 2021.02.12** Description: 1. 各个排序算法原创 2021-02-12 22:03:06 · 327 阅读 · 0 评论 -
排序算法之桶排序、基数排序和计数排序及C++实现
计数排序计数排序(Counting Sort)思想(摘自百度百科):对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小于x的值,则x可以直接存放在输出序列的第18个位置上。当然,如果有多个元素具有相同的值时,我们不能将这些元素放在输出序列的同一个位置上,因此,上述方案还要作适当的修改。计数排序是非基于比原创 2021-02-12 01:55:56 · 533 阅读 · 0 评论 -
排序算法之堆排序及C++实现
堆排序(heap sort)思想:借助于堆这个数据结构进行排序。堆排序属于比较排序,不稳定。声明 :堆的操作,包括插入,拔掉堆顶,上浮,下滤等等过程,自己画图辅助理解。下面贴出百度百科对堆的定义:堆满足两个性质:结构性质是一棵完全二叉树。堆序性质对于树中每个节点(如果它有父亲),那么它的值总是 <= 父亲节点的值(这叫大根堆),总是 >= 父亲节点的值(叫小根堆)。每次对堆进行的插入,删除操作都必须进行调整保持堆的堆序性质。堆逻辑上是一棵完全二叉树,但实际上是一个数组表原创 2021-02-11 10:58:56 · 1283 阅读 · 0 评论 -
排序算法之归并排序及C++实现
归并排序思想:将原数组拆成前后两半,对前半部分和后半部分分别执行排序过程,再将排好序的前后两部分合并。典型的分治问题,而分治一般用递归去解。归并排序也是基于比较的排序。代码:template<typename T>void merge(T* arr, int l, int m, int r, T* aux_arr) { // merge函数:合并两个有序数组 int k = m + 1; int tmp = l; int numElements = r - l原创 2021-02-08 23:54:29 · 349 阅读 · 0 评论 -
排序算法之希尔排序及C++实现
希尔排序:Donald Shell发明,冲破二次时间屏障的第一批排序算法之一。但是,若干年之后才被证明。希尔排序思想:跟插入排序思想一样,只不过是比较相距一定间隔的元素,间隔距离慢慢减小,直到最后一趟间隔为1(间隔为1就是插入排序)。所以,希尔排序又叫缩减增加排序(diminishing increment sort)。希尔排序不稳定,也是比较类排序。希尔排序使用一个序列 h1,h2, …, ht,叫做增量序列。增量序列很多,只需要 h1 为1即可(为1,不就是插入排序,所以插入排序就是增量序列只有原创 2021-02-08 15:29:37 · 430 阅读 · 0 评论 -
排序算法之插入排序及C++实现
插入排序思想:假设[0, i - 1]位置有序,将 i 位置元素插入到前面有序数组中适当的位置。一直到最后一趟,[0, n - 2]位置有序,将 n -1 位置元素插入进去即可。插入排序:我们拆词,”插入“,如何理解”插入“这个词?理解了就简单了。插入排序属于比较类的排序。插入排序是稳定的。最简单的demo:template<typename T>inline void swap(T* arr, size_t lhs, size_t rhs) { // size_t是unsign原创 2021-02-08 13:18:46 · 252 阅读 · 1 评论 -
排序算法之选择排序及C++实现
选择排序思想:从[0, n-1]选个最小的和0位置元素交换,然后从[1, n-1]选个最小的和1位置元素交换,…,最后从[n-2, n-1]选个最小的和n-2位置元素交换。共 n-1 趟。属于比较排序类别。选择排序不稳定,(稳定性其实可以这样来理解:像冒泡排序没有跨元素交换,稳定;而选择排序跨元素交换,不稳定)。selectsort代码:template<typename T>inline void swap(T* arr, size_t lhs, size_t rhs) { /原创 2021-02-08 11:20:49 · 290 阅读 · 0 评论 -
排序算法之冒泡排序及C++实现
冒泡排序思想:比较交换,行为类似于大的往下沉,小的往上冒,故名冒泡排序(Bubble Sort)。属于交换类排序。属于稳定排序(稳定,stable:即如果a==b,在原序列中a在b前面,排序完后a依旧在b前面)。这里有一点要注意,如果一个排序是稳定的,我们肯定能把它实现成不稳定的(改一下< or <=),但是,探讨稳定性我们一般公认的是它能不能被实现成稳定的。先声明:所有的排序我都会总结记录在博客里,最后会有一个大的cpp文件包含全部排序的代码,每个排序算法放在单独的一个namespace原创 2021-02-08 01:17:09 · 308 阅读 · 0 评论
分享