[解决办法] 1.从小到大排序 2.遍历数组,将值相等的放入同一数组,如 数组0:2 数组1:3,3 数组2:4 数组3:5,5,5 数组4:6 3.取出size最大的数组即可,若存在相同size的数组,取数组序号较小者 [解决办法] 你是那个OJ上面的那个题目,地址弄出来,还有上面你写的那个代码 for (i=1; i<=4000000; ++i){ if (b[i] > max){ max = b[i]; max_i = i; 这个地方的I应从0开始 而不是1 算法的思想是: 将-200万-200万的数字映射到0-400万,因为hash的时候,数组的下标不能使负数。 所以每一个数字都要加200万。
[解决办法]
[解决办法] 代码优化了一下 #include <stdio.h> #include <string.h> #define N 4000001 int hash[N]; int main() { int i,n,y,a,max; scanf("%d",&n); max = 0; y = - 2000001; for (i = 1 ;i<=n;i++) { scanf("%d",&a); if ( ++hash[a+2000000] > max ) { max = hash[a+2000000]; y = a ; } else if ((hash[a+2000000] == max) && (a <= y)){ y = a; } } printf("%d\n",y); return 0; }
[解决办法]
C/C++ code
int count = 18; int arr[18] = {10, 5, 5, 1, 1,2,3,4,5,6,7,7,8,100,102,123,10,9}; int exchange = 1; for (int i = 0; i < 17 && exchange; i++) { exchange = 0; for (int j = 0; j< 17-i; j++) { if(arr[j] > arr[j+1]){ exchange = 1; int tmp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = tmp; } } } int descValue = arr[0]; int descCount = 1; int descValueTmp = arr[0]; int descCountTmp = 1; for (int k = 1; k<18; k++) { if(descValueTmp == arr[k]){ descCountTmp ++; } else{ if(descValue == descValueTmp){ descCount = descCountTmp; } else{ if(descCountTmp > descCount){ descValue = descValueTmp; descCount = descCountTmp; } else if(descCountTmp == descCount){ descValue = descValueTmp > descValue ? descValue : descValueTmp; } } descValueTmp = arr[k]; descCountTmp = 1; } } printf("%d", descValue);
[解决办法]
[解决办法] [Quote=引用:]
代码优化了一下 #include <stdio.h> #include <string.h> #define N 4000001 int hash[N]; int main() { int i,n,y,a,max; scanf("%d",&n); max = 0; y = - 2000001; for (i = 1 ;…… [/Quot] 这个好。