c++/数据结构
杂质想当杂志
实践出真实.
展开
-
代码随想录刷题笔记
代码随想录对应题目链接数组是有序数组,是使用二分查找的基础条件。以后大家只要看到面试题里给出的数组是有序数组,都可以想一想是否可以使用二分法。或者说可以转换在一个有序数组中找一个数的题目。同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。代码随想录对应题目链接双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。对于使用双指针的题目,需要明确双指针的含义,针对其含义去思考题解方式。双指针法(快慢指针法)在数组和链原创 2022-07-12 17:33:11 · 691 阅读 · 0 评论 -
关于priority_queue大小顶堆排序问题
在做leetcode的347. Top K Frequent Elements时,用到了priority_queue这个容器适配器,这个容器默认排序是大顶堆,关于它的排序准则正如代码随想录里说的(对应题解链接):那么,我们看下priority_queue的函数模板定义:以及priority_queue的介绍:注意标黄的这句话。我们可以看见,所用的容器是vector(当然我们可以改成别的容器如list),没看源码实现,做一波合理的推测:priortity_queue只有这三种操作:top(原创 2022-07-09 10:09:51 · 633 阅读 · 0 评论 -
二分法时间复杂度
二分法的查找过程相当于在一颗二叉树中寻找一条从root节点到叶节点的路径,其中root节点的数值是最开始的数量总数N,其他根节点数值的是其父节点的数值的二分之一,所有叶节点的数值是1。因此,可以知道,二叉树的层数就是二分法的调用次数,调用次数就是二分法的时间复杂度,有:N/(2n) = 1;-> N = 2n;-> n = log2N;所以,时间复杂度是logN....原创 2022-05-05 10:30:00 · 4799 阅读 · 0 评论 -
二叉树顺序储存的父子节点索引关系
一个二叉树每一层的节点数是一个等比数列,其中,q=2;则第一层有 a1 = 1 个节点,第k层有 ak = a1* 2(k-1) = 2(k-1) 节点则,根据等比数列求和公式,一个层数为 n 的满二叉树的节点树为:2n - 1;如果采用顺序储存方式有,第k层的最后一个节点的索引值为:2k-1 - 2;第k+1层的第一个节点的索引值为:2k - 1;第k层的第一个节点的索引值为:2k-1 - 1;假设现在一个节点N位于第k层的第m个节点,即索引值为:i = 2k-1 - 1 + m ;则原创 2022-05-01 18:49:20 · 1047 阅读 · 0 评论 -
在priority_queue下对容器、容器适配器的理解和实现
priority_queue 优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。 注意: 默认情况下...转载 2022-01-01 11:17:55 · 135 阅读 · 0 评论