いつもお世話になっています。
下記の質問についてご存知の方がいらっしゃいましたらご教示を願います。
【質問の主旨】
ある配列内において重複する数値の要素を除いたのち、その配列がもともといくつの要素で構成されているかカウントするプログラムがあります。
const arr = [2, 3, 4, 4, 5] var removeDuplicates = function(nums) { for (let i = 0; i < nums.length; ++i) { while(nums[i] === nums[i + 1]) { nums.splice(i + 1, 1); } } return nums.length; }; console.log(removeDuplicates(arr)); // 4
なぜこのコードで、定数arrは4つの要素から成る配列であることが判定できるのでしょうか?
【質問の補足】
1. このアルゴリズムとプログラミングについて
このアルゴリズムはleetcodeから引用し、プログラミングコードはこの問題について解答をされた方のコードを引用しています。leetcode上ではこのコードは「正解(Accepted)」とされます
leetcode上ではこのコードは「正解」とされています。
2. spliceで処理をしたあとの配列値について
特にwhile文の中で、nums.splice(i + 1, 1);
としたあとの配列が[2, 3, 4, 5]となることは理解できますが、その配列が別の変数に代入されているわけではないにもかかわらず、return nums.length;
したときにはすでに要素の個数が5から1つ減って4になっていることがよくわかりません。
3. デバッグについて
nums.splice(i + 1, 1);
について確認するために、paiza.ioを使ってデバッグをしました。
するとこちらは処理結果の配列や、その要素数も想定外の結果が返されます。leetcode と paizo.io でなぜ異なるような挙動をするのかよく分かりません。
以上、よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/05 02:26