题目
- 首先收集所有出现次数大于1的数,然后先取其中最大的数,如果次数为2的倍数,则每次取两个放到首尾->首+1、尾-1->首-2、尾-2的位置,...,然后为奇数,则减到1后,记录该值;然后对第二大的数继续该操作,最后往回文串中间添加记录到减到1时的最大的值
- 如果只有 0 是重复出现的数,那么只需要返回数组中最大的数即可
function process(arr) {
// 是否只有 0 是重复出现的
let onlyZero = true;
let obj = {},
res,
midMax = -1;
arr = arr.sort((a, b) => b - a);
for (let i = 0; i < arr.length; i++) {
if (obj[i]) {
if (i !== 0) {
onlyZero = false;
}
obj[i]++;
} else {
obj[i] = 0;
}
}
if (!onlyZero) {
for (let i = 0; i < arr.length; i++) {
let count = obj[i],
mid,
res = "";
while (count != 1) {
mid = Math.floor(res / 2);
let left = res.substring(0, mid);
let right = res.substring(mid, res.length);
res = left + i + i + right;
count = count - 2;
}
if (count === 1) {
if (midMax === -1) {
midMax = i;
}
}
}
mid = Math.floor(res / 2);
let left = res.substring(0, mid);
let right = res.substring(mid, res.length);
if (midMax !== -1) {
res = left + midMax + right;
}
} else {
res = arr[0] + "";
}
return res;
}