免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: teebye
打印 上一主题 下一主题

算法题哦 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-03-19 09:01 |显示全部楼层
原帖由 efhilt 于 2009-3-18 20:16 发表
lambda s : len(set(s)) * 1. / len(s)  > 0.5


居然看到了传说中的shhgs。 审题不错,赞一个。
但你的签名实在让人讨厌。

论坛徽章:
0
2 [报告]
发表于 2009-03-19 09:46 |显示全部楼层
LZ的题目本来是判断有没有满足条件的字符
而不是求出那个字符。
大多数人都看错题了 呵呵

通常对于求出在一个列表中出现次数大于总数一半的元素问题。 是可以用一个与快速排序相类似的算法的。

具体到本题 有一个特点不知道大家注意到没有。
这个列表是字符串而元素是字符~~~~
如果这个字符是ASCII字符的话那么一切就都简单了。 因为ASCII总共才128个。
我们可以建立一个长度为128的数组, 用字符的ASCII作为下标, 数组中的元素是出现的次数。

  1. #include <stdio.h>
  2. int main(){
  3.   int chr_count[128];
  4.   int len;
  5.   char str[] = "hellooooooo";
  6.   char *p = str;
  7.   memset(chr_count, 0, sizeof(chr_count));
  8.   while(*p){
  9.     chr_count[(int)*p]++;
  10.     p++;
  11.   }
  12.   len = p - str;
  13.   p = str;
  14.   while(*p){
  15.     if(chr_count[(int)*p] > (len + 1)/ 2){
  16.       printf("%c\n", *p);
  17.       return 0;
  18.     }
  19.     p++;
  20.   }
  21.   return 0;
  22. }

复制代码

论坛徽章:
0
3 [报告]
发表于 2009-03-19 23:22 |显示全部楼层
原帖由 dreamerx2004 于 2009-3-19 22:44 发表



真的不错吗?我觉得他的算法是错误的吧?Please advice..


是哈。 是错的。。。。。。。
我自杀了算了

[ 本帖最后由 DQP 于 2009-3-19 23:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP