找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 523066680

[挑战题]Largest Number

[复制链接]
发表于 2016-11-15 21:39:51 | 显示全部楼层
本帖最后由 CrLf 于 2016-11-16 01:36 编辑

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

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 短小精悍

查看全部评分

发表于 2018-9-26 08:42:51 | 显示全部楼层
自由主义。
  1. #!perl

  2. my @n = ( 3, 30, 34, 5, 9 );
  3. print sort { $b . $a cmp $a . $b } @n;
复制代码

评分

参与人数 1技术 +1 收起 理由
523066680 + 1 优秀

查看全部评分

发表于 2018-9-28 15:47:05 | 显示全部楼层
来个python的,大概在60ms, 一个很巧的比较方法,我是想不出来 - -,参考人家的。
https://www.geeksforgeeks.org/ar ... ggest-number-set-2/
  1. class Solution:
  2.    
  3.     def largestNumber(self,nums):
  4.         l = len(str(max(nums)))+1
  5.         new = [((str(i)*l)[:l],str(i)) for i in nums]
  6.         new.sort(reverse = True)
  7.         res = "".join([i[1] for i in new])
  8.         return "0" if res[0]=="0" else res
复制代码
发表于 2018-9-29 09:08:21 | 显示全部楼层
这些数所能拼凑出的最大数字是 9 5 34 3 30
  1. // 2018-09-29

  2. # include <stdio.h>
  3. # include <stdlib.h>

  4. typedef long long i64;
  5. typedef struct { int tail; int val; } Num;

  6. void sort(int*, int*, int);
  7. int cmp(const void*, const void*);

  8. int main (){
  9.     int test[] = { 3, 30, 34, 5, 9 };
  10.     int len    = sizeof(test) / sizeof(*test);
  11.     int sorted[len];

  12.     sort (test, sorted, len);
  13.     for (int i = 0; i < len; i++)
  14.         printf ("%d ", sorted[i]);
  15.    
  16. }

  17. # define join(A, B) (A->val * (i64)B->tail + B->val)
  18. int cmp(const void* A, const void* B){
  19.     Num* a = (Num*) A;
  20.     Num* b = (Num*) B;
  21.     i64 ab = join (a, b);
  22.     i64 ba = join (b, a);
  23.     if (ab == ba) return 0;
  24.     return ab > ba ? -1 : 1;
  25. }

  26. void sort(int* test, int* sorted, int len){
  27.     Num n[len];

  28.     for (int i = 0; i < len; i++){
  29.         int tail = 1;
  30.         int val  = test[i];

  31.         while (val) tail *= 10, val /= 10;
  32.         
  33.         n[i].tail = tail;
  34.         n[i].val  = test[i];
  35.     }

  36.     qsort(n, len, sizeof(Num), cmp);
  37.     for (int i = 0; i < len; i++) sorted[i] = n[i].val;
  38. }
  39.    
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:18 , Processed in 0.015532 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表