1 回答
TA贡献1827条经验 获得超7个赞
如果您的输入由整数组成,如示例中所示, pne 选项是将数组缩减为一个对象,其键是数字,其值是这些值到目前为止出现的次数。然后,迭代对象(其Object.entries将按升序数字键顺序迭代,对于整数键),并创建数组以返回:
const func = arr => {
const valuesObj = {};
arr.forEach((num) => {
valuesObj[num] = (valuesObj[num] || 0) + 1;
});
return Object.entries(valuesObj)
.flatMap(
([num, count]) => Array(count).fill(num)
);
};
console.log(
func([5,2,8,1,9,10,10,11,4,7,3,6])
);
这O(N)
及时运行。
要在保持O(N)
运行时同时考虑负整数,请为负数创建另一个对象:
const func = arr => {
const valuesObj = {};
const negativeValuesObj = {};
arr.forEach((num) => {
if (num >= 0) valuesObj[num] = (valuesObj[num] || 0) + 1;
else negativeValuesObj[-num] = (negativeValuesObj[-num] || 0) + 1;
});
return [
...Object.entries(negativeValuesObj).reverse()
.flatMap(
([num, count]) => Array(count).fill(-num)
),
...Object.entries(valuesObj)
.flatMap(
([num, count]) => Array(count).fill(num)
)
];
};
console.log(
func([5,2,8,1,-5, -1, 9,10,10,11,4,7,3,6, -10])
);
对于非整数项,您必须使用具有更高计算复杂度的不同算法。
添加回答
举报