返回列表 发帖
本帖最后由 CrLf 于 2016-11-16 01:36 编辑

JS 修改后耗时约为 109ms
var largestNumber = function(nums) {
    return nums
        .sort((a,b) => ''+b+a > ''+a+b ? 1 : -1)
        .join('')
        .replace(/^0+(?=.)/,'')
}COPY
尽量用 ES6 的语法来写的版本看起来也很萌...
var largestNumber = function(nums) {
    let arr = [];
    for(let a of nums)arr.unshift(`${a}`)
    let retArr = arr.sort((a,b) => b+a > a+b ? 1 : -1)
    return retArr[0]==='0' ? '0' : retArr.join('')
}COPY
1

评分人数

TOP

自由主义。
#!perl
my @n = ( 3, 30, 34, 5, 9 );
print sort { $b . $a cmp $a . $b } @n;COPY
1

评分人数

New BEE

TOP

来个python的,大概在60ms, 一个很巧的比较方法,我是想不出来 - -,参考人家的。
https://www.geeksforgeeks.org/ar ... ggest-number-set-2/
class Solution:
   
    def largestNumber(self,nums):
        l = len(str(max(nums)))+1
        new = [((str(i)*l)[:l],str(i)) for i in nums]
        new.sort(reverse = True)
        res = "".join([i[1] for i in new])
        return "0" if res[0]=="0" else resCOPY

TOP

这些数所能拼凑出的最大数字是 9 5 34 3 30
// 2018-09-29
# include <stdio.h>
# include <stdlib.h>
typedef long long i64;
typedef struct { int tail; int val; } Num;
void sort(int*, int*, int);
int cmp(const void*, const void*);
int main (){
    int test[] = { 3, 30, 34, 5, 9 };
    int len    = sizeof(test) / sizeof(*test);
    int sorted[len];
    sort (test, sorted, len);
    for (int i = 0; i < len; i++)
        printf ("%d ", sorted[i]);
   
}
# define join(A, B) (A->val * (i64)B->tail + B->val)
int cmp(const void* A, const void* B){
    Num* a = (Num*) A;
    Num* b = (Num*) B;
    i64 ab = join (a, b);
    i64 ba = join (b, a);
    if (ab == ba) return 0;
    return ab > ba ? -1 : 1;
}
void sort(int* test, int* sorted, int len){
    Num n[len];
    for (int i = 0; i < len; i++){
        int tail = 1;
        int val  = test[i];
        while (val) tail *= 10, val /= 10;
        
        n[i].tail = tail;
        n[i].val  = test[i];
    }
    qsort(n, len, sizeof(Num), cmp);
    for (int i = 0; i < len; i++) sorted[i] = n[i].val;
}
    COPY
New BEE

TOP

返回列表