列表

详情


2728. 计算一个环形街道上的房屋数量

给定一个代表环形街道的类 Street 和一个正整数 k,表示街道上房屋的最大数量(也就是说房屋数量不超过 k )。每个房屋的门初始时可以是开着的也可以是关着的。

刚开始,你站在一座房子的门前。你的任务是计算街道上的房屋数量。

Street 类包含以下函数:

返回 ans,它表示街道上的房屋数量。

 

示例 1:

输入:street = [0,0,0,0], k = 10
输出:4
解释:街道上有 4 座房屋,它们的门都是关着的。
房屋数量小于 k,即 10。

示例 2:

输入:street = [1,0,1,1,0], k = 5
输出:5
解释:街道上有 5 座房屋,向右移动时第 1、3 和 4 座房屋的门是开着的,其余的门都是关着的。房屋数量等于 k,即 5。

 

解释:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * Definition for a street. * class Street { * public: * Street(vector<int> doors); * void openDoor(); * void closeDoor(); * bool isDoorOpen(); * void moveRight(); * void moveLeft(); * }; */ class Solution { public: int houseCount(Street* street, int k) { } };

cpp 解法, 执行用时: 16 ms, 内存消耗: 46.2 MB, 提交时间: 2023-10-15 15:18:05

/**
 * Definition for a street.
 * class Street {
 * public:
 *     Street(vector<int> doors);
 *     void openDoor();
 *     void closeDoor();
 *     bool isDoorOpen();
 *     void moveRight();
 *     void moveLeft();
 * };
 */
class Solution {
public:
    int houseCount(Street* street, int k) {
        //先把所有门都关上
        while(k--)
        {
            street->closeDoor();
            street->moveRight();
        }
        //然后打开一个门
        street->openDoor();
        //按照一个方向循环一遍,找到这个打开的门,看一共走了几步
        int ans = 1;
        street->moveRight();
        while(!street->isDoorOpen())
        {
            ans+=1;
            street->moveRight();
        }
        return ans;
    }
};

java 解法, 执行用时: 2 ms, 内存消耗: 42.6 MB, 提交时间: 2023-10-15 15:17:46

/**
 * Definition for a street.
 * class Street {
 *     public Street(int[] doors);
 *     public void openDoor();
 *     public void closeDoor();
 *     public boolean isDoorOpen();
 *     public void moveRight();
 *     public void moveLeft();
 * }
 */
class Solution {
    public int houseCount(Street street, int k) {
        for (int i = 0; i < k; i++) {
            street.closeDoor();
            street.moveRight();
        }
        int ans = 1;
        street.openDoor();
        street.moveRight();
        while (!street.isDoorOpen()) {
            ans++;
            street.moveRight();
        }
        return ans;
    }
}

python3 解法, 执行用时: 168 ms, 内存消耗: 16.7 MB, 提交时间: 2023-10-15 15:17:13

# Definition for a street.
# class Street:
#     def openDoor(self):
#         pass
#     def closeDoor(self):
#         pass
#     def isDoorOpen(self):
#         pass
#     def moveRight(self):
#         pass
#     def moveLeft(self):
#         pass
class Solution:
    def houseCount(self, street: Optional['Street'], k: int) -> int:
        while (k):
            street.closeDoor()
            street.moveRight()
            k -= 1
        street.openDoor()
        street.moveRight()
        ans = 1
        while not street.isDoorOpen():
            ans += 1
            street.moveRight()
        return ans

    def houseCount2(self, street: Optional['Street'], k: int) -> int:
        la, x = 0, k
        if not street.isDoorOpen():
            street.openDoor()
            
        while k:
            k -= 1 
            street.moveRight()
            if street.isDoorOpen():
                street.closeDoor() 
                la = 0
            else:
                la += 1
        return x - la

上一题