自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 快速找出故障机器

假设一个机器仅存储一个标号为ID的记录(假设ID是小于10忆的整数) 假设每份数据保存两个备份 这样就有两个机器存储了同样的数据1.在某个时间 如果得到一个数据文件ID的列表 是否能够快速找出这个表中仅出现一次的ID2.如果已经知道只有一台机器死机(也就是说只有一个备份丢失)?如果两台机器死机(假设同一个数据的两个备份不会同时丢失)?问题1:直接遍历表 利用一个数组记录下每

2015-05-30 22:14:41 273

原创 一摞烙饼的排序

假设有n块大小不一的烙饼 那最少要翻几次 才能达到最后大小有序的结果?为了把最大的烙饼摆在最下面 先把最上面的烙饼和最大的烙饼之间的烙饼翻转 这样最大的烙饼就在最上面了 接着 把所有烙饼翻转 最大的烙饼就摆在了最下面之后我们队上面n-1、n-2个饼重复这个过程两次翻转就可以把最大的烙饼翻转到最下面 最多需要把上面的n-1个烙饼一次翻转两次 因此 最多需要2(n-1)次翻

2015-05-30 22:13:15 456

原创 象棋将帅问题

输出将帅的所有合法位置 要求代码中只使用一个变量用1-9的数字按照优先顺序来表示每个格点的位置要求出A(将)、B(帅)所满足的合法位置 即AB不能在一条竖线上循环遍历AB 81次 然后判断AB是否在一条竖线上 就可以得到所有的合法信息 两个嵌套循环即可但是只允许使用一个变量?按照两层循环的思想 固定一个点 A 然后再遍历九次B  判断AB

2015-05-30 20:19:49 482

原创 判断两个链表是否相交

给出两个单行链表的头指针 判断这两个链表是否相交 为了简化 这里假设两个链表均不带环方法1:判断第一个链表的每个节点是否在第二个链表中 这种方法的时间复杂度为O(lenth(l1)*lenth(l2))方法2:如果两个链表相交 那么这两个链表就会有共同的节点 而节点地址又是节点的唯一标识 所以我们能够判断两个链表是否有存在地址一致的节点 就可以判断两个链表是否相交

2015-05-21 16:54:11 378

原创 字符串移位包含

给定两个字符串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 346

原创 区间重叠

给定一个源区间【x,y】(y>=x) 和N个 无序的目标区间[x1,y1] [x2,y2] ....[xn,yn] 判断源区间[x,y]是不是在目标区间内方法1:一个直接的思路即将源区间[x,y]和N个无序的目标区间逐个投影到坐标轴上 只考察源区间未被覆盖的部分 如果所有的目标区间全部投影完毕 仍有源区间没有被覆盖 那么源区间就不在目标区间之间方法2:对现有

2015-05-21 16:20:47 505

原创 数组分割

有一个没有排序、元素个数为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 350

原创 数组循环位移

设计一个算法 把一个含有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 454

原创 最大公约数

求两个正整数的最大公约数方法一:辗转相除法假设两个正整数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 419

原创 寻找数组中的最大值和最小值

同时找出一个数组的最大和最小的数 对于一个由N个整数组成的数组 需要比较多少次才能把最大和最小的数找出来面试的时候面试官有闻过此题 但是我一直不明白当时问的是什么意思 没有考虑到比较次数 以为时间复杂度为O(N)了还想怎么样,Naive、、、直到在书上看见此题。。。比较次数 最直接的是比较2N次 ,找最大最小数各比较N  一般最大数和最小数不会是同一个 可以考虑将数组分成两

2015-05-19 16:15:24 576

原创 快速寻找满足条件的两个数

快速找出一个数组中的两个数字 让这两个数字之和等于一个给定的数字(假设这个数组中肯定存在这样一组或以上的数方法一:穷举法: 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 595

原创 求数组的字数组之和的最大值

先看一维数组的情况:方法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 548

原创 最长递增子序列

找出一维数组中的最长递增子序列 也就是找到一个标号的序列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 278

原创 编程之美-电梯调度算法

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 962

原创 分治算法 求数组逆序数

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 1074

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除