baidu 18号的笔试题

36387893 2009-10-18 10:00:48
一个M*M的矩阵A,一个字符串数组S,比较S中的字符串是否在A中的连续对角线序列中出现。
譬如一个4*4的矩阵 1 2 3 4
a b c d
5 6 7 8
e f g h
则其连续对角线从左算:1 2 a 5 b 3 4 c 6 e f 7 d 8 g h
或 1 a 2 3 b 5 e 6 c 4 d 7 f g 8 h
从右算:4 3 d 8 c 2 1 b 7 h g 6 a 5 f e
或 4 d 3 2 c 8 h 7 b 1 a 6 g f 5 e
(a)(b)两问,大概是写出优化高效的算法,不一定要程序,可用流程图或者文字描述,简述算法原理,计算时间复杂度。

没有什么好的思路,大家有什么好的解法吗?
...全文
467 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
summerXJY100 2009-10-22
  • 打赏
  • 举报
回复
mark
ma3587 2009-10-22
  • 打赏
  • 举报
回复
先匹配第一个字符,找到位置以后向四个方向搜索
zentropy 2009-10-21
  • 打赏
  • 举报
回复
感觉就是一般的字符串匹配
看能不能在常数级别上做一些优化
期待有更好的算法以供学习学习
yilizkongjian 2009-10-20
  • 打赏
  • 举报
回复
连续对角线序列?
andy0409 2009-10-20
  • 打赏
  • 举报
回复
关键是找出连续对角线上元素下标的简略表达式,定位每个元素。
yangbing694383929 2009-10-20
  • 打赏
  • 举报
回复
顶!
tianya0609 2009-10-20
  • 打赏
  • 举报
回复
学习
  • 打赏
  • 举报
回复
先把这个矩阵改成两串字符串。
这个还是很容易的。
和为0 (0,0)
和为1 (0,1) (1,0)
和为2 (0,2)(1,1) (2,0)
和为3 (0,3) (1,2) (2,1) (3,0)
……

然后一正一反下去就是两串字符串了。



然后字符串匹配就是了(最好用KMP算法咯)
showjim 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sbwwkmyd 的回复:]
感觉就是一个普通的字符串匹配算法,每次匹配过程中 首字符的时候要分成最多4个分支进行搜索.
[/Quote]
首字符匹配的时候要分成最多4个分支进行搜索
showjim 2009-10-19
  • 打赏
  • 举报
回复
感觉就是一个普通的字符串匹配算法,每次匹配过程中 首字符的时候要分成最多4个分支进行搜索.
threeleafzerg007 2009-10-19
  • 打赏
  • 举报
回复
当然,比较繁琐的 是左上 左下 右下 右上的对角线遍历问题 在边界处如何转向
threeleafzerg007 2009-10-19
  • 打赏
  • 举报
回复
我的解法:

先做一个 字符 hashmap
hash的结点设计

typedef struct _hashnode_t
{
int row;
int col;
struct _hashnode_t *next
}hashnode_t;

hashnode_t *hashmap[255];

遍历一次数组得到每个字符相应的 row,col (可重复)

然后开始遍历字符串数组,

对于每一个字符串,先找出第一个字符在hashmap中的 row,col 无则查第二个字符串。

有则分别按照 左上 左下 右下 右上 四个对角线方向遍历自身的字符串 ,直至符合或者不符合。

最后依次遍历整个字符串数组。

建hashmap O(M*M)时间

遍历字符串数组 O(sizeof(array) * strlen(string))

我觉得属于技巧题

wuyu637 2009-10-18
  • 打赏
  • 举报
回复
1, 第一个想到的是KMP算法
不过这样要计算4次。

33,027

社区成员

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

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