摘要:
冒泡排序改一下都能成为一个合理的洗牌算法。。。。#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; ... 阅读全文
摘要:
当前面试中各大名企经常出现各种各样的概率类面试题。究其原因,我觉得是概率型面试题可以综合考查面试者的思维能力、应变能力、数学能力。在这里对各种类型的概率型题目进行了收集和总结,希望在自我总结的同时对大家有所帮助。1、给你一个数组,设计一个既高效又公平的方法随机打乱这个数组(此题和洗牌算法的思想一致)方法比较简单,基本思想是每次随机取一个数,然后把它交换到最后的位置。然后对前(n-1)个数使用递归的算法。递归实现:void suffle_dfs(int ar[], int n){ if(n1){ swap(ar[n-1], ar[rand()%n]); n--;... 阅读全文
摘要:
利用等概率函数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 { ... 阅读全文
摘要:
第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数?第二步:假设两个有序数组长度不等,一样的求出中位数?思想是二分查找。。。解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么我就把数组1和数组2直接合并,然后再直接找到中间元素。对于这样的方案,第一题和第二题就没有什么区别了。这样的话时间复杂度就是O(n)。通常在这样的情况下,那些mentor类型的达人就会循循善诱道:“你还有更好的办法吗:)” 如果比线性更高效,直接能想到的就是对数了O(log(n)),这个时间复杂度在这里可能吗? 当然还是可能的。来继续看看下面的分析。先找来了一个图 阅读全文