この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
48. 重複要素のある配列で特定要素の一番出現位置を返す
解法1: 線形探索 配列を先頭から順番に探索して、特定の整数が最初に現れるindexを返します。配列が昇順にソートされているため、見つかった最初のインデックスが返されます。 時間計算量はO(n)で、最悪の場合、すべての要素を一度調べる必要があります。
function findIndex(arr, num) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === num) {
return i;
}
}
return -1;
}
解法2: 二分探索 配列が昇順にソートされているため、二分探索を使用して特定の整数を探します。私たちは、配列の中央の要素が特定の整数より大きいか小さいかを調べて、配列を半分に割ることができます。このプロセスを繰り返すと、特定の整数が見つかるか、配列を二分探索することができなくなるまで続けます。見つかった場合、そのインデックスを返します。見つからなかった場合、-1を返します。 時間計算量はO(log n)であり、配列が大きい場合でも高速に機能します。
function findIndex(arr, num) {
let low = 0;
let high = arr.length - 1;
while (low <= high) {
let mid = Math.floor((low + high) / 2);
if (arr[mid] < num) {
low = mid + 1;
} else if (arr[mid] > num) {
high = mid - 1;
} else {
// found it!
return mid;
}
}
// not found
return -1;
}