このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
Facebookでは、異なるタスクが限られた数のコンピュータで同時に実行されなければならない。あなたにはやってくるタスクの集合が与えられる。各コンピュータは最大で1つのタスクを実行することができ、各タスクは1つのコンピュータで完全に実行されなければならない。complexityとcomputersいう整数型の配列が与えられる。complexityの要素iはi番目のタスクの複雑度を表す。computersのi番目の要素はi番目のコンピュータが扱うことができるタスクの複雑度の最大値である。与えられたcomputersで実行できるタスクの最大の数を返せ。
私の解答はこちら。
import java.util.Arrays; public class ImportantTasks { public int maximalCost(int[] complexity, int[] computers) { Arrays.sort(complexity); Arrays.sort(computers); int idxCompl = complexity.length - 1; int idxCompu = computers.length - 1; int nExecutable = 0; while( idxCompl >=0 && idxCompu >= 0 ){ if( computers[idxCompu] >= complexity[idxCompl] ){ nExecutable++; idxCompu--; } idxCompl--; } return nExecutable; } }
二つの配列をソートして、複雑度とコンピュータの処理能力を比較することを繰り返せばOK。大きい方から探すのが簡単と思います。
0 件のコメント:
コメントを投稿