C++学习
文章平均质量分 57
Fivesplus
这个作者很懒,什么都没留下…
展开
-
[转]基类与派生类,父类指针指向子类对象
http://m.blog.csdn.net/blog/wangzengdi/30028013先来看一段程序(来自趋势科技笔试):#include using namespace std;class Base_J {public: Base_J() { cout << "Base Created" << endl; } ~Base_J(转载 2015-04-10 20:18:38 · 927 阅读 · 0 评论 -
寻找数组中的最大值和最小值
同时找出一个数组的最大和最小的数 对于一个由N个整数组成的数组 需要比较多少次才能把最大和最小的数找出来面试的时候面试官有闻过此题 但是我一直不明白当时问的是什么意思 没有考虑到比较次数 以为时间复杂度为O(N)了还想怎么样,Naive、、、直到在书上看见此题。。。比较次数 最直接的是比较2N次 ,找最大最小数各比较N 一般最大数和最小数不会是同一个 可以考虑将数组分成两原创 2015-05-19 16:15:24 · 612 阅读 · 0 评论 -
最大公约数
求两个正整数的最大公约数方法一:辗转相除法假设两个正整数x,y ,令x/y=p ,x%y=q 即 x=p* y +q 则 如果一个数能整除x,y 则一定能够整出y 和q 如果一个数能够整除y和q 则一定能够整除x,y ,所以x,y和y ,q具有相同的公约数gcd(x,y)=gcd(y,x%y)....比如 x=18 y=12gcd(18,12)=gcd(12原创 2015-05-19 16:48:33 · 452 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾 称之为数组的旋转 输入一个递增排序的数组的一个旋转 输出旋转数组的最小元素例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 该数组最小元素为1#include using namespace std;int a[]={3,4,5,1,2,3};int n=5;int findbyorder(int *a,int low,i原创 2015-06-09 10:09:18 · 350 阅读 · 0 评论 -
求数组的字数组之和的最大值
先看一维数组的情况:方法1:遍历所有可能的sum:时间复杂度为O(N*N*N)int maxsum1(int *a,int n){ int M=-100000; int s=0; for (int i=0;i<n;i++){ for(int j=i;j<n;j++) { for(int k=i;k<j;k++) { s=s+a[k]; }原创 2015-05-19 11:39:42 · 570 阅读 · 0 评论 -
用qsort对字符串数组排序需要注意的几个问题
qsort是万能数组排序函数,必须要学会使用,简单的数组自然不用说,这里主要讨论一下字符串数组的使用。 首先看一下qsort的原型: void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); 正确使用这个函数要注意几点:1.b转载 2015-06-13 18:09:59 · 692 阅读 · 0 评论 -
分治算法 求数组逆序数
http://blog.csdn.net/xiaofengsheng/article/details/5491090int Meg(int *t,int *a,int x,int y,int m,int n){int k=0;int order=0;int i=x;int j=m;for(i=x;i{while(ja[j])j++;ord原创 2015-05-14 21:57:59 · 1095 阅读 · 0 评论 -
最长递增子序列
找出一维数组中的最长递增子序列 也就是找到一个标号的序列b[0],b[1],...b[m](0方法一:从i开始 遍历先前所有的递增子序列 判断当前的a[i] 与最长子序列中的每一个元素的大小 如果满足递增则将i加入 int *LS=new int[n]; for(int i=0;i<n;i++) { LS[i]=1; for(int j=0;j<i;j++) {原创 2015-05-19 09:49:48 · 299 阅读 · 0 评论 -
快速找出故障机器
假设一个机器仅存储一个标号为ID的记录(假设ID是小于10忆的整数) 假设每份数据保存两个备份 这样就有两个机器存储了同样的数据1.在某个时间 如果得到一个数据文件ID的列表 是否能够快速找出这个表中仅出现一次的ID2.如果已经知道只有一台机器死机(也就是说只有一个备份丢失)?如果两台机器死机(假设同一个数据的两个备份不会同时丢失)?问题1:直接遍历表 利用一个数组记录下每原创 2015-05-30 22:14:41 · 295 阅读 · 0 评论 -
快速寻找满足条件的两个数
快速找出一个数组中的两个数字 让这两个数字之和等于一个给定的数字(假设这个数组中肯定存在这样一组或以上的数方法一:穷举法: for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { if (a[i]+a[j]==m) cout<<a[i]<<' '<<a[j]<<endl; } }算法时间复杂度为O(N*N)原创 2015-05-19 15:25:03 · 615 阅读 · 0 评论 -
编程之美-电梯调度算法
1、简单的双重循环可以解决O(N )2、书中提出另一种想法 假设电梯停在i层 爬楼梯的总数为Y 若电梯停在i-1层 则i层以上的N3人 需要多爬一层 i层的N2也需多爬一层 i-1层的N1人则少爬一层 所以总共走的数目为 Y-N1+N2+N3 即 Y-(N1-N2-N3)若在i+1层停下 则i+1层的N3人少一层 i层和i-1层多走N2+N1 总的数目为Y-N3+N1+N2 即原创 2015-05-15 13:07:01 · 1004 阅读 · 0 评论 -
一摞烙饼的排序
假设有n块大小不一的烙饼 那最少要翻几次 才能达到最后大小有序的结果?为了把最大的烙饼摆在最下面 先把最上面的烙饼和最大的烙饼之间的烙饼翻转 这样最大的烙饼就在最上面了 接着 把所有烙饼翻转 最大的烙饼就摆在了最下面之后我们队上面n-1、n-2个饼重复这个过程两次翻转就可以把最大的烙饼翻转到最下面 最多需要把上面的n-1个烙饼一次翻转两次 因此 最多需要2(n-1)次翻原创 2015-05-30 22:13:15 · 491 阅读 · 0 评论 -
象棋将帅问题
输出将帅的所有合法位置 要求代码中只使用一个变量用1-9的数字按照优先顺序来表示每个格点的位置要求出A(将)、B(帅)所满足的合法位置 即AB不能在一条竖线上循环遍历AB 81次 然后判断AB是否在一条竖线上 就可以得到所有的合法信息 两个嵌套循环即可但是只允许使用一个变量?按照两层循环的思想 固定一个点 A 然后再遍历九次B 判断AB原创 2015-05-30 20:19:49 · 500 阅读 · 0 评论 -
void const f() vs void f() const
void const f() is equivilent to const void f(), which means the return type (in this case a void) is const. This is totally meaningless not only because it's a void (there is nothing there that need转载 2015-04-10 20:36:49 · 487 阅读 · 0 评论 -
求解最长回文子串 之Manacher算法
回文串包括奇数长的和偶数长的,一般求的时候都要分情况讨论,这个算法做了个简单的处理把奇偶情况统一了。算法的基本思路是这样的,把原串每个字符中间用一个串中没出现过的字符分隔开来(统一奇偶),用一个数组p[ i ]记录以 str[ i ] 为中间字符的回文串向右能匹配的长度。原串:w a a b w s w f d新串: # w # a转载 2015-04-13 11:09:47 · 486 阅读 · 0 评论 -
KMP算法
问题描述:有一个文本串S,和一个模式串P,查找P在S中的位置暴力破解法:int ViolentMatch(char* s, char* p) { int sLen = strlen(s); int pLen = strlen(p); int i = 0; int j = 0; while转载 2015-04-12 16:08:46 · 420 阅读 · 0 评论 -
STL sort排序多维数组
将数组转换为结构体 编写cmp函数~原创 2015-04-21 15:42:16 · 791 阅读 · 0 评论 -
hiho1039字符消除
http://hihocoder.com/problemset/problem/1039没有想到什么好的方法 列出所有情况然后对每一种情况求解最后求出最大值原创 2015-04-17 18:01:42 · 432 阅读 · 0 评论 -
数组循环位移
设计一个算法 把一个含有N个元素的数组循环右移K位 要求时间复杂度为O(N ) 且只允许使用两个附加变量方法1:将长度为N的数组 每次移动一位 移动k次 如abc移动三次 为abc ->cab->bca->abc. 当移动为N此时 与原数组相同 因此 当k>N 时 移动结果与 k%N 相同 for (int i=0;i<k%N;i++) { char t=a[0];原创 2015-05-21 09:59:31 · 472 阅读 · 0 评论 -
区间重叠
给定一个源区间【x,y】(y>=x) 和N个 无序的目标区间[x1,y1] [x2,y2] ....[xn,yn] 判断源区间[x,y]是不是在目标区间内方法1:一个直接的思路即将源区间[x,y]和N个无序的目标区间逐个投影到坐标轴上 只考察源区间未被覆盖的部分 如果所有的目标区间全部投影完毕 仍有源区间没有被覆盖 那么源区间就不在目标区间之间方法2:对现有原创 2015-05-21 16:20:47 · 540 阅读 · 0 评论 -
数组分割
有一个没有排序、元素个数为2n的正整数数组 要求如何能把这个数组分割为元素个数为n的两个数组 并使两个字数组的和最接近 方法1:将数组的所有元素排序为a1将它们划分为两个数组s1=[a1,a3....a2n-1] ,s2=[a0,a2,....a2n]从s1和s2中找出一对数进行交换 是的sum(s1) 和sum(s2)之间的值尽可能的小 直到无法交换 这种想法的缺陷是s1和s2原创 2015-05-21 11:20:08 · 371 阅读 · 0 评论 -
字符串移位包含
给定两个字符串s1和s2 要求判定s2是否能够被通过s1作循环移位 得到的字符串包含 假设给定s1=AABCD s2=CDAA 返回true 给定s1=ABCD s2=ACBD false方法1:穷举法将长度为N的s1移动N次 每次移动1为 查看是否包含s2方法2:将长度为N的s1移动N次 保留每次前面移动的数据如s1=ABCDABCD->ABCD原创 2015-05-21 16:40:29 · 367 阅读 · 0 评论