百度面试2

jsunnygirl 2006-09-17 07:54:04
高手试试吧:)


三、编程题:30分 共1题
注意:要求尽可能提供完整代码,如果可以编译运行酌情加分。

1. 内存中有一个长数组,条目数为10万,数组单元为结构体struct array,sizeof(struct array)为512字节。结构有一int型成员变量weight。现需要取得按weight值从大到小排序的前500个数组单元,请实现算法,要求效率尽可能高。


四、设计题:35分 共1题
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等,建议多写一些伪代码或者流程说明。

1. 请设计一个字典。以字符串为索引,存储用户定义的定长结构。要求有增、删、查、改的功能。已经给定一个函数,可以由字符串映射到一个签名,每个签名由两个unsigned int类型组成。假设每一个字符串能够对应唯一的一个签名,完全没有重复(或者重复的概率可以忽略),并且签名分布足够均匀。
请描述你的数据结构?内存如何申请?增、删、查、改的功能如何实现?如果操作很频繁,该如何优化?
...全文
249 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tailzhou 2006-09-17
  • 打赏
  • 举报
回复
第3题的想法:
用struct element
{
int weight;
int index; //数组的下标
}来表示数组元素;
用一个平衡二叉树来保存前500个最大的元素的struct element;

前500个数组元素直接用来构造树,
后面的每个元素跟树内最小的元素比较,大于的话,删除该最小节点,插入新的元素,然后平衡树
cunsh 2006-09-17
  • 打赏
  • 举报
回复
sizeof(struct array)为512字节。

===========
要是复制大的结构体太慢的话把上边那个算法改成指针的.
cunsh 2006-09-17
  • 打赏
  • 举报
回复
template<class _II, class _RI> inline
_RI partial_sort_copy(_II _F1, _II _L1, _RI _F2, _RI _L2)
{return (_Partial_sort_copy(_F1, _L1, _F2, _L2,
_Dist_type(_F2), _Val_type(_F1))); }
template<class _II, class _RI, class _Pd, class _Ty> inline
_RI _Partial_sort_copy(_II _F1, _II _L1, _RI _F2, _RI _L2,
_Pd *, _Ty *)
{_RI _X = _F2;
if (_X != _L2)
{for (; _F1 != _L1 && _X != _L2; ++_F1, ++_X)
*_X = *_F1;
make_heap(_F2, _X);
for (; _F1 != _L1; ++_F1)
if (*_F1 < *_F2)
_Adjust_heap(_F2, _Pd(0), _Pd(_X - _F2),
_Ty(*_F1));
sort_heap(_F2, _X); }
return (_X); }
SammyLan 2006-09-17
  • 打赏
  • 举报
回复
第三题:求第N小元素,时间复杂度为0(N)
因为有10W元素之多,求前500个元素集合,效率应该比快排高
不知道合适不?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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