![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
小算法
zhaobey
这个作者很懒,什么都没留下…
展开
-
最大子数组和(最大子序列和 | 连续子数组最大和)
理论部分见http://www.ahathinking.com/archives/120.html下面为个人代码#include #include #include #includeusing namespace std;int maxsub(int *p, int len){ int sum = *p; int maxsum = *p; for(int i =1;i原创 2015-08-30 22:04:08 · 220 阅读 · 0 评论 -
常用排序算法源代码(快排,插入排序,堆排序,冒泡等)
备忘用~void swap(int &x, int &y){ x = x^y; y = x^y; x = x^y;}O(N*N)的三大算法 (一)选择排序 核心思想,每次用后面m个元素中查找最小的放在当前m个元素的第一个位置上。void selecttsort(int *a, int n){ for (int i = 0; i < n - 1; ++i)原创 2015-10-12 11:23:01 · 347 阅读 · 0 评论 -
复习概要-网络和数据库
11原创 2015-10-19 17:59:15 · 118 阅读 · 0 评论 -
杨氏矩阵搜索
杨氏矩阵,即存在一个矩阵A[M][N]。 其中任意一行,从左到右是递增的;任意一列,从上到下是递增的。搜索一个数据是否在数组中,最直接的方法当然是一个个的找,复杂度为O(N*M)。 另外可以利用矩阵的特点来“二分查找”。考虑右上角的元素,对于这个元素而言,比它大的在下面,比它小的数据在左边。 因此可以拿这个数据和欲查找数据进行比较,若欲查找数据较大,则往下查找,否则往左查找。 也可以考虑左下原创 2015-09-09 17:48:33 · 154 阅读 · 0 评论 -
二叉树的分层遍历(BFS)
这个题目用队列做,非常简单 1 充分利用了队列先入先出的概念 2 递归的终止条件就是‘if (seq.size())’的size,其为0时,不会进一步递归。void _seqTreeBylevel(queue<TreeNode *> &seq) { int size = seq.size(); for (int i = 0; i < size; ++i) {原创 2015-09-17 10:51:03 · 241 阅读 · 0 评论 -
二叉树打印所有的路径 & 根据数组构建完全二叉树
这道题目暂时没想起来怎么用递归去做,就用非递归吧。 这道题目是的地址是https://leetcode.com/problems/binary-tree-paths/ 主要是用了一个vector来保存节点信息,这个节点信息是对原来节点信息的封装, 增加了两个单独的参数,这两个参数表示“左右子树是不是存在以及是不是访问过” 默认值是-1,取0表示有子树且没有访问过,取1表子树已经访问过。 基原创 2015-09-17 10:10:27 · 449 阅读 · 0 评论 -
数组奇偶重排
bool check(int x)//{ return (x & 0x01)? false : true;}void swap(int &x, int &y){ x = x^y; y = x^y; x = x^y;}void move(int *p, int len){ if (p == NULL || len <= 0)return;原创 2015-09-15 16:38:39 · 370 阅读 · 0 评论 -
几个找数字的小题目
N+1个数字,其中有一个是重复的,要求找出来。 方法:累加后的和减掉1~N的和就是重复的那个数字。 方法2:使用bitmap或者hash表1~N中缺少一个数字,要求找出来 方法1:累加后的和被1~N来减,就是那个数字 方法2:hash表。N个数字是偶数对出现的,有个数字是单独出现的,要求找出来。 方法:所有数字进行异或,最后的值就是那个数字(a^a = 0)N个数字是偶数对出现的,有两个数原创 2015-09-15 21:09:24 · 213 阅读 · 0 评论 -
最近看编程之美的一些心得(不断更新)
排序复杂度:O(N²),O(N*logN),O(N)查找负责度:O(N),O(logN),O(1)其中排序复杂度为N²的为直接排序,选择排序,希尔排序NlogN的为归并排序,快速排序和堆排序N的一般是做hash或者通过bitmap,布隆过滤器等。如果考虑到提高排序效率,则提高到log级别时,要考虑二分法排序;提高到O(N)级别则考虑bitmap或者hash了。原创 2015-08-30 21:59:52 · 246 阅读 · 0 评论 -
移动字符串和字符串删除
两个小题目。 一个是:字符串里面只有字母和星号,要求把星号移动最左边,字母移动到最右边,要求复杂度尽可能低。 比如“a*b*c*d*”移动之后成为”****abcd” 这个题目有两个方法,首先就是暴力解法。从串尾或者串首判断(假设串尾),如果是星号则移动到串首起第一个不是星号的位置,然后把从那个位置开始的串统统后移一位到星号处。复杂度应该是 平方级。 这个方法的劣势就在于字母移动的位置可能不原创 2015-09-14 13:23:57 · 266 阅读 · 0 评论 -
数组子串的最大乘积
和数组子串的最大和 类似,数组子串的最大乘积也有两种求值方法。 对应的,之前的判断和改为判断积;之前的跟‘0’比较变成跟‘1’比较(若A>1,则AB比A大,否则比A小),对应代码为:#include <iostream>using namespace std;double d[7];double End[7];double maxsub(double *p, int len){ if原创 2015-09-09 20:44:01 · 255 阅读 · 0 评论 -
读书笔记之 LCS 最大公共序列
LCS最大公共序列,即A,B字符串中的最大公共部分,可以是不连续的。这块代码分为两部分,两部分的时间复杂度是一样的,都是O(N*N),空间复杂度有不同假设dij为A字符串取i个字符,B字符串取j个字符后对应俩字符串的LCS的长度。那么:当i=0或者j=0的时候,显然dij=0;i!=0且j!=0,并且a[i]=b[j],此时dij=d(i-1)(j-1)+1;i!=原创 2015-09-05 16:24:55 · 174 阅读 · 0 评论 -
把二元查找树转变成排序的双向链表
把二元查找树转变成排序的双向链表原创 2015-08-30 12:45:12 · 160 阅读 · 0 评论