免费注册 查看新帖 |

Chinaunix

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

[算法] 从一百个数中找不存在的数 [复制链接]

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
11 [报告]
发表于 2012-11-23 11:05 |只看该作者
回复 4# lxyscls_cu


    通俗易懂,简单直接,好。 {:3_189:}

论坛徽章:
0
12 [报告]
发表于 2012-11-23 16:22 |只看该作者
回复 4# lxyscls_cu


    建个索引数组——1-100,初始为{0}
    声明变量 int sum = 0

    录入:
     if 索引数组对应位置的值为0 : 索引数组对应位置的值=1 且 sum +=  索引数组对应位置 (将所有非重复值累加)
   
   得出缺失数: 5050-sum
            

   

论坛徽章:
0
13 [报告]
发表于 2012-11-26 09:52 |只看该作者
BITMAP啊 ~~

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
14 [报告]
发表于 2012-11-26 10:10 |只看该作者
循环一次,但做两个逻辑
1重复检测,2累加

当然循环两次也是OK的

论坛徽章:
0
15 [报告]
发表于 2012-11-26 13:40 |只看该作者
题目的意思我理解了有点歧义,是100个数字里 拿走一个,还剩99个数,求出缺的那个数,还是说100个数里,有1个唯一重复的数字。
前者的话,用异或能解决,后一个再想想。。
  1. #include<stdio.h>

  2. int get_miss_no(int *data, int n);

  3. int main(void)
  4. {
  5.     int arr[4] = {5,2,1,3}; //假设5个数字中随机扣掉1个,还剩4个
  6.     printf("\nmiss no is %d\n", get_miss_no(arr,4));   
  7.     return 0;
  8. }

  9. int get_miss_no(int *arr, int n)
  10. {
  11.     int miss_no = arr[0];
  12.     for(int i = 1; i < n; i++)
  13.                 miss_no ^= arr[i];
  14.     for(int i = 0; i < n+1; i++)
  15.         miss_no ^= i+1;
  16.     return miss_no;
  17. }
复制代码

论坛徽章:
0
16 [报告]
发表于 2012-11-26 13:43 |只看该作者
方法:
1.【时空复杂度O(nlogn)】排序+扫描,找出重复的那个【挨在一块】,即可求出缺失的;
2.【时空复杂度O(n)】申请数组flag[100],初始化为0,扫描数组,将相应的flag + 1,如果变成2,说明该值重复,从而可以得到缺失的;
3.【时间复杂度O(n),空间复杂度O(1)】
扫描一次,求得和S1, 和平方和S2:
设缺失的数为X, 重复的为Y;则有方程:
Y - X = S1 - (1+2+3....+100);
Y^2 - X ^2 = S2 - (1^2+2^2+....+100^);
即可求得X,Y
回复 1# rdcwayx


   

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
17 [报告]
发表于 2012-11-26 23:34 |只看该作者
2L正解

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
18 [报告]
发表于 2013-01-06 16:44 |只看该作者
回复 7# folklore


    这个要用 ^ 吧?

论坛徽章:
0
19 [报告]
发表于 2013-01-06 18:26 |只看该作者
貌似可以用集合的概念,就是标准模版库里面的

论坛徽章:
0
20 [报告]
发表于 2013-01-06 18:47 |只看该作者
回复 5# InMySin

其实本质是异或的逆运算是异或自己吧,
比如c = a^b;    b = c^a; 也就是 a^b^a = b, 一个数异或另一个数两次其值不变。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP