上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 18 下一页
摘要: 问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。解法一:从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性。字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m),总体复杂度为O(n*n*m)。字符串包含判断,若采用KMP算法,时间复杂度为O(n),这样总体的复杂度为O(n*n)。若字符串的长度n较大,显然效率比较低。其中n为S1的长度 阅读全文
posted @ 2013-08-20 16:54 一枚程序员 阅读(5540) 评论(0) 推荐(1) 编辑
摘要: 何谓海量数据处理? 所谓海量数据处理,其实很简单,海量,海量,何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie/,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式 阅读全文
posted @ 2013-08-18 21:36 一枚程序员 阅读(2106) 评论(0) 推荐(0) 编辑
摘要: 实现把单循环链表例置算法的思考过程:第一:需要保存临时数据的变量,不然无法完成倒置。第二:要完成倒置就需要遍列,又需要一个变量第三:用于得到最后的结果,这个暂时考虑也需要一个变量单个节点的倒置是本身,1->1两个节点的倒置1->2,可以参考两个数的交换,这就需要临时变量了 p=head; 1q=head->next; 2s =p ; 1q->next = s;2->1p->next =q; 1->2->1三个节点。。。。。。。//这样得到了头指针*p=head;//2。完成遍列的代码 *q=head->next;while(q!=head) 阅读全文
posted @ 2013-08-17 20:46 一枚程序员 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题。 什么是约瑟夫环? “约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。”(百度百科中的解决办法列出了很多,可以看到循环链表并不是最简单的方法) 这道面试题考察了循环链表的“创建”,“遍历”和“删除”。创建的循环链表的结构图:解决约瑟夫环问题的过程#includeusing ... 阅读全文
posted @ 2013-08-17 20:42 一枚程序员 阅读(1304) 评论(0) 推荐(0) 编辑
摘要: 全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘中都会考到。。首先来看看题目是如何要求的(百度迅雷校招笔试题)。题目:用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cba。。一、全排列的递归实现为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。 阅读全文
posted @ 2013-08-17 17:30 一枚程序员 阅读(19403) 评论(0) 推荐(3) 编辑
摘要: 冒泡排序改一下都能成为一个合理的洗牌算法。。。。#include static int a[56];int main(){ char input; for(int i = 0; i > input) { for(int i = 0; i < 55; ++i) for(int j = 0; j <= i; ++j) { if(a[j] + a[j+1] % 2) { int temp; ... 阅读全文
posted @ 2013-08-16 20:16 一枚程序员 阅读(2160) 评论(0) 推荐(0) 编辑
摘要: 当前面试中各大名企经常出现各种各样的概率类面试题。究其原因,我觉得是概率型面试题可以综合考查面试者的思维能力、应变能力、数学能力。在这里对各种类型的概率型题目进行了收集和总结,希望在自我总结的同时对大家有所帮助。1、给你一个数组,设计一个既高效又公平的方法随机打乱这个数组(此题和洗牌算法的思想一致)方法比较简单,基本思想是每次随机取一个数,然后把它交换到最后的位置。然后对前(n-1)个数使用递归的算法。递归实现:void suffle_dfs(int ar[], int n){ if(n1){ swap(ar[n-1], ar[rand()%n]); n--;... 阅读全文
posted @ 2013-08-16 19:19 一枚程序员 阅读(1954) 评论(0) 推荐(1) 编辑
摘要: 利用等概率函数Rand5产生等概率函数Rand3问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数。//使用Rand5()实现Rand3()int Rand3(){ int x; do { x = Rand5(); } while (x >= 3); return x;}//利用Rand3编写Rand5怎么办?int Rand5(){ int x; do { ... 阅读全文
posted @ 2013-08-16 16:15 一枚程序员 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数?第二步:假设两个有序数组长度不等,一样的求出中位数?思想是二分查找。。。解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么我就把数组1和数组2直接合并,然后再直接找到中间元素。对于这样的方案,第一题和第二题就没有什么区别了。这样的话时间复杂度就是O(n)。通常在这样的情况下,那些mentor类型的达人就会循循善诱道:“你还有更好的办法吗:)” 如果比线性更高效,直接能想到的就是对数了O(log(n)),这个时间复杂度在这里可能吗? 当然还是可能的。来继续看看下面的分析。先找来了一个图 阅读全文
posted @ 2013-08-16 16:03 一枚程序员 阅读(2947) 评论(0) 推荐(0) 编辑
摘要: 对于const变量,我们不能修改它的值,这是这个限定符最直接的表现。但是我们就是想违背它的限定希望修改其内容怎么办呢?于是我们可以使用const_cast转换符是用来移除变量的const限定符。const_cast类型转换能够剥离一个对象的const属性,也就是说允许你对常量进行修改。#includeusing namespace std;/*用法:const_cast (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 一、常量指针被转化成非常量指针,并且仍然.. 阅读全文
posted @ 2013-08-14 14:15 一枚程序员 阅读(483) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 18 下一页