H3C面试问题
本帖最后由 horstlinux 于 2012-11-08 21:48:58 编辑
昨天接到H3C HR的面试邀请,本来不想去的, 和自己的方向不是太一致,看了看面试通知, 就在我家旁边, 那就试试白。 9:00去面试, 去到了,一层站了好多人(还要领零时卡),HR把我们分开安排去做面试题,本人就讨厌做面试题的(无赖,在别人的地盘就听别人的), 有两道编程题, 大概用30分钟,写完了, 为了赶时间,没怎么看就交了, 过一会有个技术来了, 就是让简单介绍一下自己,看了看我的简历,过一会说我的面试题第一题, 有bug, 我当时想不是在机器上敲的, 有问题正常,要是工作有bug可以调吗, 大致思路就是这样的。他也没说什么, 然后就聊聊别的, 叫我等通知,个人感觉没戏。
?? 回到公司, 我就测试了一下那道面试题, 测试了一下没有发现有什么bug, 题目内容就是计算一下表达式中小括号匹配的个数,我的主要思路就是压栈的思想,我的代码如下:
static int regMatch(char *reg)
{
??? char * tmp = reg;
??? int flag = 0;
??? int ret = 0;
??? for(;*tmp != '\0'; tmp++)
??? {
??????? if(*tmp == '(')
??????? {
??????????? flag ++;
??????? }
??????? if(flag != 0 && * tmp == ')')
??????? {
??????????? flag --;
??????????? ret ++;
??????? }
??? }
??? return ret;
}
那位大神给我看看, 学习学习,谢谢
------最佳解决方案--------------------如3楼所说,如果传递的是空指针,会出现段错误。
此外,当第一个if判断字符为左括号时,可以直接继续循环,没有必要进行接下来的if判断,此处可优化。
关于4楼所述,我想计算机仅能处理有限的值是必然的,可能考题的重点不在这里。如果一定要考虑这方面的话,我觉得unsigned long long可能更适合一些。
------其他解决方案--------------------自己顶起
^_^^_^
------其他解决方案--------------------目测木有发现问题
坐等楼下解释
------其他解决方案--------------------目测没有问题。除了个人感觉需要对reg指针进行非空判断
------其他解决方案--------------------若')'出现前'('的个数大于2147483647个,超出int的范围,flag就变成负值了
flag记录'('的个数,应该是非负的 可以unsigned
------其他解决方案--------------------
一年前,也去过H3C面试。
------其他解决方案--------------------)()()
这种情形就不匹配吧,但是用你的算法好像是匹配的。
这一道题也是应届生招聘的一道上机题。。。
------其他解决方案--------------------哦,看错题了。求匹配括号的个数,没看出什么问题。还以为是所有括号是否匹配呢。
其他可能问题可能有字符串指针为NULL,还有整型的溢出问题。楼上都说了。
static int regMatch(char *reg)
{
assert(reg != NULL);
if(reg) {
char * tmp = reg;
int flag = 0;
int ret = 0;
for(;*tmp != '\0'; tmp++)
{
if(*tmp == '(')
{
flag ++;
}
if(flag != 0 && * tmp == ')')
{
flag --;