数据结构
文章平均质量分 79
ypp1
这个作者很懒,什么都没留下…
展开
-
双堆求中位数,不进行排序
求中位数其实实在维持中位数,给你一个数组vector<int> nums = {2,1,4,5},我们把小于中位数的放到一起,大于中位数的放到一起,这样中间的那个数就是中位数了.大于中位数的放到小顶堆,小于中位数的放到大顶堆 保持两个堆的大小不超过2,因为中位数两边的数肯定相等的或者一边比另一边大1,但是绝对不能大2,否者中位数就不是当前我们定义的2了 当堆大小超过1的时候,我...原创 2019-10-31 10:51:41 · 619 阅读 · 0 评论 -
sort函数对结构体排序以及第三个参数的理解
概念:函数指针:指向函数的指针,如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。注意这里的函数名同样是一个指针,可以当做参数被调用.仿函数:他本来不是函数,但是具有函数的性质,函数有什么性质呢? 有参...原创 2019-10-26 09:57:53 · 1341 阅读 · 0 评论 -
桶排序 bucket_sort
首先如果数据的大小如果不大的情况下,通排序是可以达到时间复杂度的.这完全使用空间来换时间 没有空间的话,通排序的时间复杂度取决于在各个桶内采取的排序算法的时间复杂度.eg:有数组vector<int> nums = [1,3,2,5,3,7,4,9]solution:建立一个数组,大小是nums中最大的数加1,//找到最大值auto max_value = ma...原创 2019-10-24 12:32:05 · 192 阅读 · 0 评论 -
优先队列priority_queue中使用pair对的方法
优先队列的格式:priority_queuq<type, container, function>; //默认的情况是priority_queue<int, vector<int>, greater<int>>,即大顶堆,排序显示的从小到大.解决问题:vector<int> nums = {1,2,3,4},vector<...原创 2019-10-15 09:27:04 · 7880 阅读 · 0 评论 -
水壶问题
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许: 装满任意一个水壶 清空任意一个水壶 从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous "Die Hard" example)输入...原创 2019-10-12 17:21:44 · 351 阅读 · 0 评论 -
探究c++中map的自动排序问题
主要目的:这里主要是用map对一个自定义的类进行排序,其实类似结构体的排序,但是这是在插入的过程中直接排序的。 map中的保存有重复的值其实是可以更改的,一切都在那个比较函数的使用//要求对下列结构体安装name,或则id进行排序,或者二分查找排序,使用upper_bound和lower_bound查找指定的name,idstruct student{ string name;...原创 2019-07-19 18:09:45 · 6310 阅读 · 1 评论 -
二叉树的节点统计
一般而言,对一个没有什么约束的二叉树进行节点的统计,都是递归int get_value(TreeNode *root){ if(!root){ return 0; } return get_value(root->left) + get_value(root->right) + 1;}统计完全二叉树的叶子节点数由于完全二叉树只有最后层...原创 2019-08-27 14:08:36 · 488 阅读 · 0 评论 -
组合排列中重复数问题
在全排列问题中,有这样的一个问题,比如给你一个数组[1,2,3,4],求出他的全排列,可以有很多种方法,康拓展开是一个。但是当出现重复数字时就不好处理了,比如[1,2,1,4],在回溯的过程中,会出现相同的排列,使用两个相同的1造成的,程序的逻辑本身没有错。其实全排列就是递归树,如下所示观察发现,第二个子树刚开始能不能选1呢,答案是否定的。因为前一个1没有用,这就造成当前选1,接下来有...原创 2019-08-27 14:30:59 · 4691 阅读 · 0 评论 -
完整的二分搜索
首先给出一般的二分搜索代码int binary_serach(vector<int> arr, int data){ int min = 0; int max = arr.size() - 1; int mid; while(min <= max){ mid = (min + max)/2; //这句话需要改进 ...原创 2019-10-10 09:15:40 · 119 阅读 · 0 评论