JavaScript 124ms: | var largestNumber = function(nums) { | | var arr = []; | | [].forEach.call(arguments,function(a){a.map?[].push.apply(arr,a):arr.push(a)}) | | return arr | | .sort(function(a,b){ | | return ''+b+a > ''+a+b ? 1 : -1 | | }) | | .join('').replace(/^0+(.)/,'$1') | | }COPY |
C语言 0ms: | char* largestNumber(int* nums, int numsSize) { | | struct struct_num{ | | int digit; | | int number; | | }; | | | | struct struct_num *group[10][100], *pg, *pg2; | | int group_count[10]={0,0,0,0,0,0,0,0,0,0}; | | int i,j,k; | | int number,index,digit; | | char output[10000]="0"; | | char *p=output; | | | | const char itoa_map[11]="0123456789"; | | | | for(i=numsSize;i--;){ | | number = nums[i]; | | | | for(digit=10;number>=digit;digit*=10){} | | index = number/(digit/10); | | | | pg=(struct struct_num *)malloc(sizeof(struct struct_num)); | | | | group[index][group_count[index]++]=pg; | | (pg)->number = number; | | (pg)->digit = digit; | | } | | | | for(i=10;i--;){ | | for(j=group_count[i];j-->0;){ | | pg = group[i][j]; | | | | for(k=j;k-->0;){ | | pg2 = group[i][k]; | | if( | | ((long long) pg->number * pg2->digit+pg2->number)< ((long long) pg2->number * pg->digit + pg->number) | | ){ | | * (long long*) pg ^= * (long long*) pg2; | | * (long long*) pg2 ^= * (long long*) pg; | | * (long long*) pg ^= * (long long*) pg2; | | } | | } | | } | | for(j=group_count[i];j--;){ | | pg = group[i][j]; | | number = pg->number; | | digit = pg->digit / 10; | | while(digit >= 1){ | | *p++ = itoa_map[number / digit % 10]; | | digit /= 10; | | } | | free(pg); | | } | | } | | if(output[0]=='0')return "0"; | | | | *p='\0'; | | | | return output; | | }COPY |
|