- 博客(8)
- 收藏
- 关注
原创 vector的操作和扩容
1、vector数据结构 vector是一段连续的内存空间。start,finish,end_of_storage三个指针描述了空间状态,这三个是普通的指针。start到finish是已经使用的内存,里面有元素。finish到end_of_storage是未使用的内存,里面没有元素。2、定义与其初始化(指定其空间大小和初始值vector<int>res...
2019-08-03 15:20:10
985
原创 二叉树的非递归遍历
前言:在刷leetcode的过程中遇到了二叉树的一些问题,主要是在二叉树的非递归的基础上做扩展,记录一下几种遍历的非递归方式,比较基础,要能够非常熟悉。1、先序遍历vector<int> preOrderTraversal(TreeNode* root) { vector<int>res; stack<TreeNode*&...
2019-08-03 14:16:10
193
原创 动态规划:数塔问题
题目大意从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大。如下: 9 12 15 10 6 8 2 18 9 5 19 7 10 4 16题解用动态规划考虑数塔问题时可以自顶向下的分析,自底向上的计算。 从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,...
2018-10-16 19:39:44
467
原创 顺序统计量:求数组中第i小的元素
在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。例如,在一个元素集合中,最小值是第一个顺序统计量,最大值是第n个顺序统计量(i=n)。在找最大值和最小值分别只需要n-1次就能比较找出来,若同时找出最小值和最大值,则总的比较次数至多是3[n/2]取下界。而寻找第i小的值,可以用堆排序,但时间复杂度为O(nlogn)。在此探讨期望为线性时间的选择算法。在此介绍一种解决...
2018-09-26 22:10:44
557
原创 快速排序和其随机化版本
快速排序使用了分治的思想,主要方法分为三步:分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中的每个元素。其中小标q也是划分过程的一部分。解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]进行排序。合并:因为子数组都是原地址...
2018-09-26 21:16:22
191
原创 背包问题——(贪心法)
【问题】 给定n个物品和一个容量为C的背包,物品i的重量为wi,其价值为vi,背包问题是如何选择装入背包的物品,使得装入背包中物品的总价值最大。注意和0/1背包的区别,在背包问题中,可以将某种物品的一部分装入背包中,但不可以重复装入。【想法】每次装入单位价值最大的物品。物品重量放在数组w[n]中,价值存放在数组v[n]中,问题的解存放在数组x[n]中,简单起见,假设物品已按单位重量降序排列。贪...
2016-04-25 16:58:02
4257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人