因此,我有一个问题,关于打印丢失的数字。
我有一个从0到20的整数数组,应该返回一个缺失的数字字符串。
例如:
0,1,2,8,12,13将返回"3-7,9-11,14-20“
1,2,5,12,16将返回"0,3-4,6-11,13-15,17-20“
我只是很难把缺失的值打印成序列。
到目前为止,我的代码如下:
function missingNumbers(arr){
let count = 20;
let missing = new Array();
for(let i = 0; i <= count; i++){
if(arr.indexOf(i) === -1){
missing.push(i);
}
}
return missing.toString();
}
console.log(missingNumbers([1,2]))
发布于 2022-11-14 09:43:41
将每个数组元素a[i]
与一个稳定增长的整数计数器进行比较。
如果ai匹配,则转到下一个element
。
// [0, 1, 2, 8, 12, 13] would return "3-7,9-11,14-20"
function test(a) {
let missing = [];
for (let curr = a[0], i = 0; i < a.length; curr++) {
if (a[i] === curr) {
i++
} else if (a[i - 1] === curr - 1) {
missing.push([curr, curr])
} else {
missing[missing.length - 1][1] = curr
}
}
return missing
}
console.log(test([0, 1, 2, 8, 12, 13]))
打印留下的范围作为练习。
发布于 2022-11-14 10:05:44
const missingNumbers = (arr = []) => {
let s = null;
arr.sort((a, b) => a - b);
const missing = new Array(21).fill("").reduce((p, _, i) => {
if (!arr.some(a => a === i) && s === null) s = i;
if (arr.some(a => a === i) && s !== null) {
s === (i - 1) ? p.push(s) : p.push(`${s}-${i-1}`);
s = null;
}
return p;
}, []);
if (Math.max(...arr) !== 20) missing.push(`${Math.max(...arr) + 1 === 20 ? "20":Math.max(...arr) + 1 + "-20"}`);
return missing;
}
console.log(missingNumbers([1, 2]));
console.log(missingNumbers([0, 1, 2, 8, 12, 13]));
console.log(missingNumbers([1, 2, 5, 12, 16]));
https://stackoverflow.com/questions/74428948
复制相似问题