解决:在特定时间开设多少家商店?

时间:2012-11-21 11:35:55

标签: algorithm scheduling

我在接受采访时提出了这个问题,从未真正提出过一个很好的解决方案。有人有“最佳”解决方案吗?目标是效率并且能够处理大量投入。

提供的材料:

我获得了一长串商店及其开放/关闭时间(比如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

问题的两个部分是如何存储数据以及如何有效地得到答案,我猜你是如何阅读输入等并不重要。

感谢您的时间和见解!

3 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

我会使用数据库:

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

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

为了防止查询计算沃尔玛(在您的示例中),您可以添加一秒来打开并从关闭中减去一秒(或几分钟让任何人有机会购买东西)。

答案 2 :(得分: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)
    }
}

添加代码以修剪时间值中的日期信息,只需创建所有商店的集合,迭代并查看每个商店的计数。