プログラマー:救命ボート
3127 ワード
(質問リンク)
無人島に閉じ込められている人を救命ボートで救い出したい.救命ボートは小さく、1回に最大2人しか乗れず、重量制限もあります.
例えば、人々の体重が[70 kg、50 kg、80 kg、50 kg]であり、救命ボートの重量制限が100 kgであれば、2人目と4人目は一緒に乗ることができるが、1人目と3人目の重量の和が150 kgであるため、救命ボートの重量制限を超えて一緒に乗ることはできない.
できるだけ救命ボートで全員を助けないようにしたい.
特定の人の体重の配列と救命ボートの重量制限をパラメータとして使用する場合は、すべての人を救うために必要な救命ボートの数の最大値を返す解関数を作成します.
せいげんじょうけん無人島に閉じ込められた人数は1人以上50000人以下. 1人当たり体重40 kg以上240 kg以下. 救命ボートの重量制限は40 kg以上240 kg以下. 救命ボートの重量制限は常に人の体重の中で最低価格より大きいため、救命できない人はいない. I/O例
peoplelimitreturn[70, 50, 80, 50]1003[70, 80, 50]1003
一度に2人までしか乗れないので、重い人と軽い人を合わせます.
以上であれば、重たい救命ボート1名のみ 効率の問題で、二重砲口は使用できません.
直接配列に触れると効率が大幅に低下するので,直接配列に触れるのではなく,indexを操作することで最初のindexと最後のindexが交差したときに終了する.
ソースコード
質問する
無人島に閉じ込められている人を救命ボートで救い出したい.救命ボートは小さく、1回に最大2人しか乗れず、重量制限もあります.
例えば、人々の体重が[70 kg、50 kg、80 kg、50 kg]であり、救命ボートの重量制限が100 kgであれば、2人目と4人目は一緒に乗ることができるが、1人目と3人目の重量の和が150 kgであるため、救命ボートの重量制限を超えて一緒に乗ることはできない.
できるだけ救命ボートで全員を助けないようにしたい.
特定の人の体重の配列と救命ボートの重量制限をパラメータとして使用する場合は、すべての人を救うために必要な救命ボートの数の最大値を返す解関数を作成します.
せいげんじょうけん
peoplelimitreturn[70, 50, 80, 50]1003[70, 80, 50]1003
に答える
一度に2人までしか乗れないので、重い人と軽い人を合わせます.
people
降順people
の前値と後値を合わせてlimit
以下なら救命ボートに2人乗せて以上であれば、重たい救命ボート1名のみ
直接配列に触れると効率が大幅に低下するので,直接配列に触れるのではなく,indexを操作することで最初のindexと最後のindexが交差したときに終了する.
ソースコード
function solution(people, limit) {
people.sort((a,b) => b-a);
let firstI = 0, lastI = people.length-1;
while (firstI <= lastI) {
if (people[firstI] + people[lastI] <= limit) lastI--;
firstI++;
}
return firstI;
}
Reference
この問題について(プログラマー:救命ボート), 我々は、より多くの情報をここで見つけました https://velog.io/@heony/programmers-42885テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol