我在JS中遇到了非常棘手的任务。
我有一个包含"3 -1 0 5"
我需要从第一个(已排序)数组生成一个缺少数字的字符串。第一个排序的数组是[-1, 0, 3, 5]
,因此给定序列中缺少的数字是[1, 2, 4]
。
我试图用最现代的JS以最紧凑的方式解决它,而不只是split
,parse
,sort
,min..max
如果索引为-1则推送,你懂。
答案 0 :(得分:1)
let array = "3 -1 0 5 -3 7".split(' ').map(Number);
array.sort((a, b) => a-b);
missing = Array.from({length: array[array.length-1] - array[0] + 1},
(_, idx) => array[0] + idx)
.filter(elem => !array.includes(elem));
console.log(missing);

答案 1 :(得分:1)
如果您只想要丢失的数字,可以跳过排序,因为您可以使用Math.min(...arr)
和Math.max(...arr)
来获取循环条件并获取缺失的数字。
var str = "3 -1 0 5";
function getMissingNumber(str){
var arr = str.split(/\s/);
var missingNum = [];
for(var i=Math.min(...arr); i<Math.max(...arr); i++){
if(arr.indexOf(i.toString()) === -1){
missingNum.push(i);
}
}
return missingNum;
}
console.log(getMissingNumber(str));
&#13;
答案 2 :(得分:1)
您可以对缺失的部分进行拆分,映射,排序,缩小和暂停循环。稍后加入缺失的部分。
function getMissing(string) {
return string
.split(' ')
.map(Number)
.sort((a, b) => a - b)
.reduce((r, v, i, a) => {
var last = a[i - 1];
if (!i) {
return r;
}
while (++last !== v) {
r.push(last);
}
return r;
}, [])
.join(' ');
}
console.log(getMissing('3 -1 0 5'));
&#13;
没有while
循环
function getMissing(string) {
return string
.split(' ')
.map(Number)
.sort((a, b) => a - b)
.reduce((r, v, i, a) =>
(l => r.concat(Array.from({ length: v - l - 1 }, _ => ++l)))(a[i - 1]),
[]
)
.join(' ');
}
console.log(getMissing('3 -1 0 5'));
&#13;
答案 3 :(得分:0)
在对原始字符串数组进行排序后,您可以遍历最小和最大范围,并在中间找到缺少的项目。
使用指针(arrIndex
)有助于在n
复杂度(排序后)中解决此问题,并在阵列上进行单次迭代。
let array = "3 -1 0 5".split(' ').map(Number);
array.sort((a, b) => a - b);
let missing = [];
let arrIndex = 0;
for (let i = array[0]; i < array[array.length - 1]; i++) {
if (array[arrIndex] === i) {
arrIndex++;
} else {
missing.push(i);
}
}
console.log(missing.join(' '));
答案 4 :(得分:0)
function getMissing(str) {
const sorted = str.split(' ').map(Number).sort((a,b) => a - b);
const [min, max] = [sorted[0], sorted[sorted.length - 1]];
const missingArr = Array.from({length:Math.abs(max-min)}, (_,i) => i + min).filter(item => sorted.indexOf(item) === - 1);
return missingArr.join(' ');
}
const str = "3 -1 0 5"
const result = getMissing(str);
console.log(result);