c/c++
price99
这个作者很懒,什么都没留下…
展开
-
排序
快排 快排基础是在一个序列中选一个基准数x,把小于x的数放左边,其余放右边。然后分别对左右两边序列做该操作,直到序列是有序的(序列只有一个数时肯定有序)。 void quick_sort(int l,int r) { if (l >= r) return; int i=l,j=r, key = a[l]; while (i < j) { ...原创 2018-08-10 00:15:34 · 117 阅读 · 0 评论 -
前序中序后序遍历递归非递归实现
前序遍历 根-左儿子-右儿子 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * ...原创 2018-08-10 01:39:29 · 185 阅读 · 0 评论 -
剑指offer
#二维数组查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 ##题解:主要在从右上(或者左下)找,这样可以一次排除一行或者一列,而左上和右下不行 class Solution { public: bool Find(int targe...原创 2018-08-09 00:16:45 · 79 阅读 · 0 评论 -
旋转数组中最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 ##题解 顺序查找O(log(n)),效率快的用二分(变形二分)。 旋转数组有两非减序列组成,非减序列交界的右侧为最...原创 2018-08-09 00:47:56 · 79 阅读 · 0 评论 -
斐波那契类
斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 题解 斐波那契数列公式 F(n)={n,F(n−1)+F(n−2),n=0,1n>1F(n)={n,n=0,1F(n−1)+F(n−2),n>1F(n)=\begin{cases} n, & n=0,1\\ F(n-1) + F(...原创 2018-08-09 01:28:09 · 217 阅读 · 0 评论 -
线段树
线段树 线段树是一棵二叉树,每个节点记录相应区间的信息 维护最大值 解决的问题 单点更新,求区间最值,区间和 成段更新,区间求和 二维空间覆盖问题(求覆盖面积,周长) 实现参考NOTONLYSUCCESS hdu1166 敌兵布阵 #include &amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt; //maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开大于ma原创 2018-10-14 23:01:58 · 103 阅读 · 0 评论