大连迅雷2010第二轮笔试题

wensheng_zh2007 2009-10-18 11:50:57
1、找出给定字符串中第一个发生不重复的字符,算法效率越高,得分越高。
bool get_first_norepeatcharacter(const char* str, char* result)
找到,将这第一个字符赋给result,并返回true; 否则返回false;


2、解析url地址的字符串,从URL中获取host和port。
bool getReulst(const char* url, std::sting& host, unsigned &port)
用样获取的host和port赋给函数的host和port,并返回true;否则返回false;
其中url的格式为URL="HTTP:""//"host[":"port][abs_path[?param]],
例如:http://www.xunlei.com/index.html 所得结果为host="www.xunlei.com" 没有port,就用默认的80,即port=80
http://www.sh.gov.cn:8080/default.apsx 结果host="www.sh.gov.cn" port=8080

3、在含有10亿个无符号整数的文件中,其中数值的取值范围为0------1000万,要求尽快找到比文件中指定的数大得数的个数。实现类中的三个函数,

class calculate()
{
calculate();
~calculate();
unsigned get_count(unsigned value);
};

其中提示给了一个函数是根据索引找出其中的值 unsigned get_value(unsigned index);但是频繁调用会带来很大消耗代价的。(貌似这个意思,不清楚可以问)
...全文
353 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xero_123 2009-10-19
  • 打赏
  • 举报
回复
上面是对2题的设计,但是vild(url)函数没想好怎么做
xero_123 2009-10-19
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include<string>
#include<iostream>
using namespace std;

bool getReulst(const char* url, std::sting& host, unsigned &port)
{

int k=0;

vild(url);
cout<<a[0]<<endl;
int i=0;
while(url[i]!='/')
{i++;}
i+=2;

while(((url[i])!='\0')&&(url[i]!='/'))
{
if(url[i]!=':'&&k==0)
{

host=s+url[i];

else
{k=1;
port+=url[i];

}

}
if(port.empty())
sport="80";
return true;
}
butwang 2009-10-18
  • 打赏
  • 举报
回复
1、找出给定字符串中第一个发生不重复的字符,算法效率越高,得分越高。
bool get_first_norepeatcharacter(const char* str, char* result)
找到,将这第一个字符赋给result,并返回true; 否则返回false;

假设字符串由26个字母组成,那么分配一个大小为26的数组,初始为0,用桶式排序的原理可解决,数组中每个元素的值记录字母a--z的出现次数
空间代价为常量26,时间代价O(n)


3、在含有10亿个无符号整数的文件中,其中数值的取值范围为0------1000万,要求尽快找到比文件中指定的数大得数的个数。实现类中的三个函数,
C/C++ codeclass calculate()
{
calculate();~calculate();
unsigned get_count(unsigned value);
};
其中提示给了一个函数是根据索引找出其中的值 unsigned get_value(unsigned index);但是频繁调用会带来很大消耗代价的。(貌似这个意思,不清楚可以问)

这个题用桶式排序的原理也可以解决,
分配1000万个整形元素的数组,占用空间为10M*4=40M,一个整形变量的最大值2^32=4G>10亿,数组中每个元素记录1...1000万个数出现的次数,要求比指定的数大的数的个数,可对数组元素进行累加,使每个元素记录
比他大的元素的个数,以后调用时间可达到O(1)的代价,只是查数组值
leewon1988 2009-10-18
  • 打赏
  • 举报
回复

呵呵,第一题我也是想用数组比较容易些
wbgxx 2009-10-18
  • 打赏
  • 举报
回复
忘了问了!楼主感觉咋样啊???????
wbgxx 2009-10-18
  • 打赏
  • 举报
回复
sf
butwang 2009-10-18
  • 打赏
  • 举报
回复
1、找出给定字符串中第一个发生不重复的字符,算法效率越高,得分越高。
bool get_first_norepeatcharacter(const char* str, char* result)
找到,将这第一个字符赋给result,并返回true; 否则返回false;

给出一种递归的更一般的解法
设数组a[n], k=f(i, j) 表示数组的[i, j]区间上的第一个不重复元素的下标k,
则要求的就是 ?=f(0,n-1),
现假设f(0,i)=k,考虑f(0,i+1)=?
当a[i+1]!=a[k]时f(0,i+1)=k,
当a[i+1]==a[k]时f(0,i+1)=f(k+1,i)
再加上约束条件就可,f(0,0)=0
butwang 2009-10-18
  • 打赏
  • 举报
回复
那问题进一步可变型为:有一个整形数组a[n],有n个元素,1=<a[i]<=2^32,a[n]中也可能有重复元素,但也可能有不重复的元素,试找出第一个出现不重复出现的数。
wensheng_zh2007 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 butwang 的回复:]
1、找出给定字符串中第一个发生不重复的字符,算法效率越高,得分越高。
bool get_first_norepeatcharacter(const char* str, char* result)
找到,将这第一个字符赋给result,并返回true; 否则返回false;

假设字符串由26个字母组成,那么分配一个大小为26的数组,初始为0,用桶式排序的原理可解决,数组中每个元素的值记录字母a--z的出现次数
空间代价为常量26,时间代价O(n)


3、在含有10亿个无符号整数的文件中,其中数值的取值范围为0------1000万,要求尽快找到比文件中指定的数大得数的个数。实现类中的三个函数,
C/C++ codeclass calculate()
{
  calculate();~calculate();
  unsigned get_count(unsigned value);
};
其中提示给了一个函数是根据索引找出其中的值 unsigned get_value(unsigned index);但是频繁调用会带来很大消耗代价的。(貌似这个意思,不清楚可以问)

这个题用桶式排序的原理也可以解决,
分配1000万个整形元素的数组,占用空间为10M*4=40M,一个整形变量的最大值2^32=4G>10亿,数组中每个元素记录1...1000万个数出现的次数,要求比指定的数大的数的个数,可对数组元素进行累加,使每个元素记录
比他大的元素的个数,以后调用时间可达到O(1)的代价,只是查数组值

[/Quote]
26个字母是不够的,人家也没说只有字母,即使字母还有个大小写的问题
太乙 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 wensheng_zh2007 的回复:]
1、找出给定字符串中第一个发生不重复的字符,算法效率越高,得分越高。
bool get_first_norepeatcharacter(const char* str, char* result)
找到,将这第一个字符赋给result,并返回true; 否则返回false;
---------------------------------------------
可以考虑使用hash表(字符),
----------------------------------------------------

2、解析url地址的字符串,从URL中获取host和port。
bool getReulst(const char* url, std::sting& host, unsigned &port)
用样获取的host和port赋给函数的host和port,并返回true;否则返回false;
其中url的格式为URL="HTTP:""//"host[":"port][abs_path[?param]],
例如:http://www.xunlei.com/index.html 所得结果为host="www.xunlei.com" 没有port,就用默认的80,即port=80
http://www.sh.gov.cn:8080/default.apsx  结果host="www.sh.gov.cn"    port=8080

------------------------------------
使用sscanf,正则即可
--------------------------------------


3、在含有10亿个无符号整数的文件中,其中数值的取值范围为0------1000万,要求尽快找到比文件中指定的数大得数的个数。实现类中的三个函数,
C/C++ codeclass calculate()
{
calculate();~calculate();
unsigned get_count(unsigned value);
};
其中提示给了一个函数是根据索引找出其中的值 unsigned get_value(unsigned index);但是频繁调用会带来很大消耗代价的。(貌似这个意思,不清楚可以问)
----------------
这个是不是考虑使用tree结构,B plus tree试试
-----------------
[/Quote]
na2650945 2009-10-18
  • 打赏
  • 举报
回复
学习。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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