金山软件面试题

蜡笔小新啦 2012-10-25 10:59:51
加精
1. 一个数组{3,4,5,6,3},请输出这个数组的全排列,比如34563、43563、33456...。
2. 编写程序编写程序编写程序编写程序:在O(n)时间复杂度内从数组array[0..n-1]中找出第k个最小的元素。 说明:算法可以对array中的元素进行排序。
3. 综合考察综合考察综合考察综合考察:银行有个存有n个用户编号的文件,每个数都小于n,其中n=10的7次方。每个编号都不重复。 输出:n个数升序排列。约束条件:内存最多有2兆的空间,运行时间复杂度为O(n)
...全文
13733 149 打赏 收藏 转发到动态 举报
写回复
用AI写文章
149 条回复
切换为时间正序
请发表友善的回复…
发表回复
signforlin 2013-09-21
  • 打赏
  • 举报
回复
引用 147 楼 wslejeff 的回复:
7.某天晚上,有4个人要过桥,都在桥的一边,有一个手电筒,一次最多过两个人, 不管几个人过桥都要手电筒,每个人过桥时间为1,2,5,10.请问他们最快多久可以过桥, 用什么方案? 1把10抱过去 1分钟 1回来 1分钟 1把 5抱过去 1分钟 1回来 1分钟 1把 2抱过去 1分钟
一下抱3个岂不更快。。。。
陆远 2013-06-07
  • 打赏
  • 举报
回复
引用 18 楼 pengliangchina 的回复:
[Quote=引用 14 楼 的回复:] 引用 11 楼 的回复: 引用 2 楼 的回复: 7.某天晚上,有4个人要过桥,都在桥的一边,有一个手电筒,一次最多过两个人, 不管几个人过桥都要手电筒,每个人过桥时间为1,2,5,10.请问他们最快多久可以过桥, 用什么方案? 17分钟 1 & 2 = 2分 1返回 +1分 5 & 10 = 10分 2返回 +2分 1 &…… [/Quote] 应该是14分钟。 首先 , 10和5一起过去,10分钟。 在1跑过来拿电筒,来回2分钟。 在和2一起过来,2分钟。 14分钟。
晕 差一点被你误导了,1没电筒怎么跑???
wslejeff 2013-02-28
  • 打赏
  • 举报
回复
7.某天晚上,有4个人要过桥,都在桥的一边,有一个手电筒,一次最多过两个人, 不管几个人过桥都要手电筒,每个人过桥时间为1,2,5,10.请问他们最快多久可以过桥, 用什么方案? 1把10抱过去 1分钟 1回来 1分钟 1把 5抱过去 1分钟 1回来 1分钟 1把 2抱过去 1分钟
风vs雷 2012-12-14
  • 打赏
  • 举报
回复
第一题应该是字典排序吧。stl中有一个函数的事情。
speeder 2012-12-11
  • 打赏
  • 举报
回复
全是算法之类的,挺难。
ntwarren 2012-12-01
  • 打赏
  • 举报
回复
引用 54 楼 clever101 的回复:
1. 一个数组{3,4,5,6,3},请输出这个数组的全排列,比如34563、43563、33456...。 全排序算法就是列举一些字符的所有排列顺序的一种算法,比较典型的采用递归法。下面是一种简单的全排序算法。 C/C++ code??123456789101112131415161718192021222324252627282930void ……
考虑到重复的问题,对你的代码进行了改进


void Perm(char list[], int k, int m);
int total = 0 ;
int _tmain(int argc, _TCHAR* argv[])
{
	char s[]="34567";
	Perm(s,0,4);
	printf("%d",total);
	char b;
	scanf(&b);
	return 0;
}

void Swap(char* a, char* b)
{// 交换a和b
	char temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

bool isTrack(char list[], int k, int m){
	if(m>k+1){
		for(int i = k+1;i<m;i++){
			if(list[i] == list[m])
				return true;
		}
	}
	return false;
}



void Perm(char list[], int k, int m)
{ //生成list [k:m ]的所有排列方式
	int i;
	if (k == m) {//输出一个排列方式
		for (i = 0; i <= m; i++)
			putchar(list[i]);
		putchar('\n');
		total++;
	}
	else // list[k:m ]有多个排列方式
		// 递归地产生这些排列方式
		for (i=k; i <= m; i++) {
			if((list[i] != list[k] && !isTrack(list,k,i)) || i==k){
				Swap (&list[k], &list[i]);
				Perm (list, k+1, m);
				Swap (&list [k], &list [i]);
			}
		}
}
小吕子 2012-12-01
  • 打赏
  • 举报
回复
引用 95 楼 jinmanni 的回复:
引用 18 楼 pengliangchina 的回复:引用 14 楼 的回复:引用 11 楼 的回复: 引用 2 楼 的回复: 7.某天晚上,有4个人要过桥,都在桥的一边,有一个手电筒,一次最多过两个人, 不管几个人过桥都要手电筒,每个人过桥时间为1,2,5,10.请问他们最快多久可以过桥, 用什么方案? 17分钟 1 &amp;……
mark一下!
mrliu0905 2012-11-30
  • 打赏
  • 举报
回复
怎么都是算法。。。好烦啊。。就讨厌算法。。数学不好。。。
Alanzhou007 2012-11-29
  • 打赏
  • 举报
回复
很牛B的题目啊
JWloveWTT1023 2012-11-29
  • 打赏
  • 举报
回复
好有才华啊~!!!!!!!!!!!!!!!!!!!!!!!很好很强大
fkseraph 2012-11-28
  • 打赏
  • 举报
回复
进来参考个大神们的解题方法。
WuAndMatlab 2012-11-28
  • 打赏
  • 举报
回复
好了不起啊!了不起!!!!!
yuidui 2012-11-28
  • 打赏
  • 举报
回复
菜鸟路过收了,借鉴,
oMrwang123456789 2012-11-28
  • 打赏
  • 举报
回复
进来学习一下。
self001 2012-11-27
  • 打赏
  • 举报
回复
lsadm_11154 2012-11-27
  • 打赏
  • 举报
回复
好贴,受教了,刚入行的小白路过~
haizige19850 2012-11-27
  • 打赏
  • 举报
回复
1、全排列+去重处理 2、快排变种 复杂度约为o(2n)=o(n) 3、用位图 类似计数排序 所需空间为10^7/8B 大概1MB多<2MB 复杂度o(n)
ztanhui 2012-11-27
  • 打赏
  • 举报
回复
感觉也不是很难嘛
s4ms4m 2012-11-26
  • 打赏
  • 举报
回复
mark,记下来,看看有用!
诚朴勇毅 2012-11-26
  • 打赏
  • 举报
回复
这些题目都很常见
加载更多回复(123)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧