面试3 题目二,不修改数组找到重复的数字

 

 

在一个长度为n+1 的数组里所有数字都在 1 到n之间

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int Find_num(int num[],int length )
 6 {
 7     if(num == nullptr || length <= 0)
 8         return -1;
 9     int k = 0;
10     int *tem = (int *)malloc((length) * sizeof(int));
11     for(int i = 1 ;i <= length ;i++)
12     {
13         tem[i] = 0;
14     }
15     for(int i =0 ; i< length ;i++)
16     {
17          k = num[i];
18         tem[k] = tem[k]+1;
19         printf("%d\n",tem[k]);
20         
21     }
22 
23     int max = 1;
24     int flag = 0;
25     for(int i = 1;i<= length ;i++)
26     {
27         
28         if(tem[i]> max)
29         {
30             flag = i;
31             max = tem[flag];
32         }
33     }
34     if(max == 1)  return -1;
35 
36     return flag;
37 }
38 
39 
40 int main()
41 {
42     int mun[5]= {1,4,5,5,5};
43     int a  = Find_num(mun,5);
44     printf("%d\n",a);
45     system("pause");
46 }

这里面 时常出现   数组溢出和初始化问题,修改了很多遍才成功的,针对于数组来说,范围很重要

posted @ 2018-01-16 22:29  小陈同学啦  阅读(307)  评论(0)    收藏  举报