UC算法笔试题

 

      说实话,昨天UC的笔试题基本全是基础,但是太基础,直接导致很多都不能确定了。看来不管找工作还是找实习,一定要复习到位。好在我也一直是抱着打酱油的味道,实习与否不是特别在意,否则真心要鄙视死自己啦。

      好的,言归正传,题目是一道经典的题目:在一个字符串中找到第一个只出现一次的字符。要求

     1、必须用C/C++编写代码。

     2、不能使用嵌套的for/while循环。

     看到这道题时,我坑爹的看成不能使用for/while循环了。我当时想的是,要遍历字符串不能使用for/while,除非递归和使用goto语句,否则这几乎是不可能的(如果可以,请点明)。觉得题目应该不会这么变态吧,迟迟不愿动笔,后来知道人家说的是嵌套好不好。好的,思路出来了(后来才知道网上一堆这样的题目)。

     1、暴力求解,复杂度为O(n*n).必然会使用到双循环。否决!

     2、排序解决,可以。复杂度也降低,各种排序算法见本博博文。各种内部排序算法

     3、哈希表的方式,不知道为什么,我对哈希表的方式情有独钟,很多算法我的第一反应都是哈希。O(∩_∩)O哈哈~。昨天的算法代码如下:

     4、当然,还有第四种解决方式,用二进制的方式,用两个位表示一个字符,扫描。感觉和哈希表的方式差不多。

 1 int HT[256]={0};
 2 char getChar(char* str){
 3     assert(str!=NULL);
 4     for (int i=0;i<strlen(str);i++)
 5         HT[(int)str[i]]++;
 6     for(int i=0;i<strlen(str);i++){
 7         if (HT[(int)str[i]]==1)
 8             return str[i];
 9     }
10     return NULL;
11 }

       看到博文的各路大仙,除了以上四种方式,还有其他什么求解方式,求指点。

      

    参考文献:真心无

    版权所有,欢迎转载,但是转载请注明出处:潇一

 

posted @ 2014-05-15 09:39  白来了123  阅读(1271)  评论(5编辑  收藏  举报