-1

私はインタビューでこの質問を投げかけられましたが、本当に素晴らしい解決策を思いついたことはありませんでした。誰かが「最適な」解決策を持っていますか?目標が効率であり、大量の入力を処理できる場合。

提供される資料:

私は店の長いリストとそれらの開店/閉店時間(例えば1000)を与えられます。

問題:

特定の時間帯に、開いているショップの数を返します

データ例:

Sainsburys 10:00 23:00
Asda 02:00 18:00
Walmart 17:00 22:00

イン/アウトの例

Input | Output
12:00 | 2
22:00 | 1 (walmart shut @ 22:00)
17:30 | 3

問題の2つの部分は、データを保存する方法と効率的に答えを取得する方法です。入力の読み取り方法などは実際には重要ではないと思います。

あなたの時間と洞察に感謝します!

4

3 に答える 3

2

突き刺してみましょう:

//First, we turn the time input into an int and then compare it to the open and
//closing time ints to determine if the shop is open. We'l use 10:00 in this example.
//get magic time int
int magicTimeInt = CInt("10:00".Replace(":",""));
int openstorecount = 0;
foreach(var shoptime in ShopTimesList)//SHopTImesList is the list of shop names and times
{
    string[] theShop = shoptime.Split(" ");
    if( CInt(theshop[1].ToString().Replace(":", "")) < magicTimeInt 
    && 
    CInt(theshop[2].ToString().Replace(":", "")) > magicTimeInt)
    {
        openstorecount++;
    }
}
Console.WriteLine("10:00 | " + openstorecount.ToString());
于 2012-11-21T11:48:46.557 に答える
0

私はデータベースを使用します:

TABLE shops (
 name VARCHAR,
 open TIME,
 close TIME
)

SELECT count(*) AS number_of_shops FROM shops WHERE [input_time] BETWEEN open AND close

クエリがウォルマートをカウントしないようにするには(この例では)、1秒を追加して開き、1秒を閉じてから差し引くことができます(または、誰かに何かを購入する機会を与えるために数分)。

于 2012-11-21T11:54:33.830 に答える
0

私はそれをJavaで行います:

class Shop {
    String name;
    Time opening, closing;

    Shop(String name; Time opening, Time closing){
        this.name = name;
        this.opening = opening;
        this.closing = closing;
    }

    public boolean isOpen(Time time){
        return opening.before(time) && closing.after(time)
    }
}

時間値から日付情報を削除するコードを追加し、すべてのストアのコレクションを作成し、繰り返し処理して、開いている各ストアのカウントを確認します。

于 2012-11-21T12:20:48.877 に答える