実装[Algorithm]:数列最適値位置
14196 ワード
💡 アルゴリズム実装問題に分類する.
質問する🛫
数列の最大値の位置
数列が指定されている場合は、その数列のすべての最大値の位置を出力するプログラムを作成します.
入力は自然数列を受け入れ、開始位置は0で、最も上昇した位置を配列に戻します.
すべての数字は100以下の自然数で入力されます.
[5, 2, 10, 2][4, 5, 7, 4, 8]
[12, 11, 11, 16, 11, 12]
Output
#1 [1,3]
#2 [0,3]
#3 [1, 2, 4]
ぶんせき
これは最高価格を探す問題です.for loopで問題を解決することができ、検索の起点(インデックス)が0の点と数が自然数(正の値)の点を見つければ問題を解くことができます.
に答える📖
Solution 1 (For Loop) 👍🏽
解析にはfor loopを2回スムーズに使用した.
解題の過程でfor loopを使わずに解題したいという欲求が生じたので挑戦してみました.
最高値は
だから.
これを繰り返すと、すべての年の値が見つかります.
下図に示すように、重複可能なコードを記述する能力も育成されています.
以前からアルゴリズムを勉強していましたが、私は他の方法で何度も問題を解いたことがありません.性能をあまり考えなくても、私が思いついたアイデアで解いて、良い経験を積んだようです.
質問する🛫
数列の最大値の位置
数列が指定されている場合は、その数列のすべての最大値の位置を出力するプログラムを作成します.
入力は自然数列を受け入れ、開始位置は0で、最も上昇した位置を配列に戻します.
すべての数字は100以下の自然数で入力されます.
TestCase
Input[5, 2, 10, 2][4, 5, 7, 4, 8]
[12, 11, 11, 16, 11, 12]
Output
#1 [1,3]
#2 [0,3]
#3 [1, 2, 4]
ぶんせき
これは最高価格を探す問題です.for loopで問題を解決することができ、検索の起点(インデックス)が0の点と数が自然数(正の値)の点を見つければ問題を解くことができます.
に答える📖
Solution 1 (For Loop) 👍🏽
解析にはfor loopを2回スムーズに使用した.
function answer(nums) {
let result = [];
// 최솟값 찾기
let minNum = Number.MAX_SAFE_INTEGER;
for (let i = 0; i < nums.length; i++) {
if (min > nums[i]) {
min = nums[i];
}
}
// 최솟값에 해당하는 index 찾기
let count = 0;
for (let i = 0; i < nums.length; i++) {
if (min === nums[i]) {
result[count++] = i;
}
}
return result;
}
let input = [
[5, 2, 10, 2],
[4, 5, 7, 4, 8],
[12, 11, 11, 16, 11, 12]
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1}`);
console.log(answer(input[i]));
}
ソリューション2(Recursive)-効率を考慮X解題の過程でfor loopを使わずに解題したいという欲求が生じたので挑戦してみました.
最高値は
Math.min()
探し、最高値はArray.indexOf()
インデックスで探す方法です.Array.indexOf(item, index)
メソッドは前からindexを検索し、一致する最近のindexを返す하나
このとき次のindexを検索する方法を考える.Array.indexOf(item, index)
の次の重複値が見つかるインデックスはArray.indexOf(item, Array.indexOf(item, index) + 1)
だと思います.だから.
Array.indexOf(item, index)
Array.indexOf(item, Array.indexOf(item, index) + 1)
Array.indexOf(item, Array.indexOf(item, Array.indexOf(item, index) + 1) + 1)
......これを繰り返すと、すべての年の値が見つかります.
下図に示すように、重複可能なコードを記述する能力も育成されています.
// 마음대로 풀어본 For-Loop 없는 풀이(성능 고려 X)
function answer(nums) {
let result = [];
let minNum = Math.min(...nums);
function recursive(num, index) {
if (nums.indexOf(num, index) === -1) {
return;
}
result.push(nums.indexOf(num, index));
return recursive(num, nums.indexOf(num, index) + 1); // recursive
}
recursive(minNum, 0);
return result;
}
let input = [
[5, 2, 10, 2],
[4, 5, 7, 4, 8],
[12, 11, 11, 16, 11, 12]
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1}`);
console.log(answer(input[i]));
}
Review 💡以前からアルゴリズムを勉強していましたが、私は他の方法で何度も問題を解いたことがありません.性能をあまり考えなくても、私が思いついたアイデアで解いて、良い経験を積んだようです.
Reference
この問題について(実装[Algorithm]:数列最適値位置), 我々は、より多くの情報をここで見つけました https://velog.io/@task11/Algorithm-수열-최솟값-위치テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol