- 我有一個排序的數字陣列被傳遞到我的函式中
- 我想回傳
numbers我失蹤的人數
例子:
我傳遞的陣列是 [1,5,6,9]
我缺少的數字是 2,3,4,7,8
計數器應該是 5
我正在嘗試做的事情:
不使用任何內置插件。雖然我串列中的下一個數字不是串列中已有的下一個數字,但我會加一。
function missing(numbers){
counter = 0;
let j = 1;
for(let i = 0; i<numbers.length; i ){
while(numbers[i 1] != numbers[i] j){
j =1;
counter =1;
console.log("missing " numbers[i] j)
}
}
return counter;
}
uj5u.com熱心網友回復:
我建議使用 aSet來包含輸入陣列中的所有數字,然后生成與該陣列對應的所有可能數字的范圍陣列。
為此,我們首先獲取輸入陣列的最小值和最大值,然后生成從最小值到最大值的范圍。
然后我們用Array.filter()我們原來的陣列(在Set中)移除range陣列中的所有項
function getMissingNumbers(arr) {
const [min,max] = [Math.min(...arr), Math.max(...arr)];
const range = Array.from({ length: (max - min 1)}, (v,k) => k min);
const nSet = new Set(arr);
return range.filter(n => !nSet.has(n));
}
console.log(getMissingNumbers([1,5,6,9]))
console.log(getMissingNumbers([1,5]))
console.log(getMissingNumbers([2,3,4,5,8,9]))
.as-console-wrapper { max-height: 100% !important; top: 0; }
還有一個稍微簡單的版本(假設陣列已排序):
function getMissingNumbers(arr) {
let s = new Set(arr);
let range = Array.from({ length: (arr[arr.length-1] - arr[0])}, (v,k) => k arr[0]);
return range.filter(n => !s.has(n));
}
console.log(getMissingNumbers([1,5,6,9]))
console.log(getMissingNumbers([1,5]))
console.log(getMissingNumbers([2,3,4,5,8,9]))
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
您可以采用單個回圈并從索引零運行到給定陣列的末尾。
同時使用一個變數來增加值,如果不在陣列中,則將此值推送到缺失值的結果集。
function getMissing(array) {
let i = 0,
v = array[0],
result = [];
while (i < array.length) {
if (v === array[i]) {
i ;
v ;
continue;
}
result.push(v );
}
return result;
}
console.log(...getMissing([1, 5, 6, 9])); // 2 3 4 7 8
uj5u.com熱心網友回復:
function missing(numbers){
counter = 0;
for(let i = 0; i<numbers.length; i ){
let j = 1;
while(numbers[i 1] != numbers[i] j && numbers[i] j < 10){
console.log(`missing ${numbers[i] j}`, numbers[i], j)
j =1;
counter =1;
}
}
return counter;
}
你的邏輯有問題。
- 首先,您期望在 9 之前缺少數字,這是您的 while 條件中缺少的。
- 一旦退出 while 回圈,就不會重置j變數。
- 你在列印陳述句之前增加 j 給你錯誤的值,這可能會使 while 條件失敗。
uj5u.com熱心網友回復:
您也可以嘗試在另一個內部使用 2 個回圈
function missingNumbers(arr) {
const arr2 = [];
for (let i = arr[0]; i <= arr[arr.length - 1]; i ) {
arr2.push(i);
}
if (arr.length === arr2.length) {
return [];
}
for (let i = 0; i < arr2.length; i ) {
for (let j = 0; j < arr.length; j ) {
if (arr2[i] === arr[j]) {
arr2.splice(i, 1);
}
}
}
return arr2;
}
console.log(missingNumbers([1,5,6,9]))
console.log(missingNumbers([1,5]))
console.log(missingNumbers([2,3,4,5,8,9]))
console.log(missingNumbers([1,2]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/356436.html
標籤:javascript 循环
上一篇:如何使用VUE為課程添加條件
