日期:2014-05-16  浏览次数:20738 次

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
------其他解决方案--------------------
引用:
本帖最后由 horstlinux 于 2012-11-08 21:48:58 编辑
昨天接到H3C HR的面试邀请,本来不想去的, 和自己的方向不是太一致,看了看面试通知, 就在我家旁边, 那就试试白。 9:00去面试, 去到了,一层站了好多人(还要领零时卡),HR把我们分开安排去做面试题,本人就讨厌做面试题的(无赖,在别人的地盘就听别人的), 有两道编程题, ……




一年前,也去过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 --;