发布网友 发布时间:2022-04-25 07:12
共3个回答
懂视网 时间:2022-05-19 12:12
前言
最近在工作碰到一个问题,就是用javascript求数组中所有数字能拼接出的最大整数,数组的每一项为单独的拼接项,不能再拆开,例如[2,34]中2和34分别为要被拼接的数字,而不是说34还能继续拆分为3和4。
具体需求为,将[7,321,35,4]拼接为7435321。下面话不多说了,来一起看看详细的实现方法吧。
我设计的算法如下:
function insertSort(arr) { let res = [arr[0]]; for (let i = 1, len = arr.length; i < len; i++) { let temp = arr[i]; for (let j = i - 1; j >= 0; j--) { if (!compareNum(res[j],temp)) { res[j + 1] = res[j]; res[j] = temp; } else { res[j + 1] = temp; break; } } } return res; } function compareNum(a,b) { a =""+a; b = ""+b; let aLen=a.length; let bLen=b.length; let aIndex=0; let bIndex=0; while (aIndex<aLen && bIndex<bLen){ let flag=false; if (a[aIndex]==b[bIndex]){ aIndex+1<aLen && (aIndex++,flag=true); bIndex+1<bLen && (bIndex++,flag=true); }else{ break; } if (!flag){ break; } } if (a[aIndex]>b[bIndex]){ return true; }else{ return false; } } let arr=[5,2,1,38]; // let arr=[5,2,1,38,52,4,5,593,8,55,555,492,493,7,9,61,66,6]; // let arr=[5,2,1,38,52,4,5,593,61,6]; function toInt(arr) { let newArr=insertSort(arr); document.write(newArr); return newArr.join(""); } let intNum=toInt(arr); console.log(intNum);
总结
热心网友 时间:2022-05-19 09:20
[常见面试题]拼接最大数/最小数
// 把数组中的数拼接起来,求最大值(最小值)
// 拼接起来求最大/最小,本质上就是对数据进行一种特殊的排序,将待比较的两个数字进行拼接然后做比较
// 比如a,b 需要比较ab和ba的大小,从而得出a,b的大小
// 最大/最小已经在代码中注释出来了
#include<stdio.h>
int cmpfunc_ex(const void *a, const void *b)
{
char str1[21] = {0};
char str2[21] = {0};
sprintf(str1, "%d%d", *(int *)a, *(int *)b);
sprintf(str2, "%d%d", *(int *)b, *(int *)a);
char *p1 = str1;
char *p2 = str2;
int result = strcmp(str1, str2);
return (-result); // 求最大
//return (result); // 求最小
}
int main(void)
{
char result[200] = {0};
char *p = result;
int a[] = {3, 32, 321, 2, 1, 3};
int nCount = sizeof(a) / sizeof(int);
qsort(a, sizeof(a) / sizeof(int), sizeof(int), cmpfunc_ex);
for (int i = 0; i < nCount; ++i) {
sprintf(p, "%d", a[i]);
p = &result[strlen(result)];
}
printf("%s\r\n", result);
return 0;
}
热心网友 时间:2022-05-19 10:38
#include <stdio.h>