列表

详情


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

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

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

Street 类包含以下函数:

注意: 环形 街道内,如果将房屋从 1 到 n 编号,则当 i < n 时 housei 右边的房子是 housei+1housen 右边的房子是 house1

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

 

示例 1:

输入:street = [1,1,1,1], 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 closeDoor(); * bool isDoorOpen(); * void moveRight(); * }; */ class Solution { public: int houseCount(Street* street, int k) { } };

cpp 解法, 执行用时: 108 ms, 内存消耗: 119.7 MB, 提交时间: 2023-10-16 21:08:53

/**
 * Definition for a street.
 * class Street {
 * public:
 *     Street(vector<int> doors);
 *     void closeDoor();
 *     bool isDoorOpen();
 *     void moveRight();
 * };
 */
class Solution {
public:
    int houseCount(Street *s, int k) {
        while (!s->isDoorOpen())
            s->moveRight();
        int ans;
        for (int i = 1; i <= k; i++) {
            s->moveRight();
            if (s->isDoorOpen()) {
                ans = i;
                s->closeDoor();
            }
        }
        return ans;
    }
};

java 解法, 执行用时: 11 ms, 内存消耗: 55.4 MB, 提交时间: 2023-10-16 21:08:35

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

javascript 解法, 执行用时: 120 ms, 内存消耗: 50.6 MB, 提交时间: 2023-10-16 21:08:22

/**
 * Definition for a street.
 * class Street {
 *     @param {number[]} doors
 *     constructor(doors);
 * 
 *     @return {void}
 *     closeDoor();
 * 
 *     @return {boolean}
 *     isDoorOpen();
 * 
 *     @return {void}
 *     moveRight();
 * }
 */
/**
 * @param {Street} street
 * @param {number} k
 * @return {number}
 */
var houseCount = function(s, k) {
    while (!s.isDoorOpen())
        s.moveRight();
    let ans = 0;
    for (let i = 1; i <= k; i++) {
        s.moveRight();
        if (s.isDoorOpen()) {
            ans = i;
            s.closeDoor();
        }
    }
    return ans;
};

golang 解法, 执行用时: 104 ms, 内存消耗: 8.1 MB, 提交时间: 2023-10-16 21:08:07

/**
 * Definition for a street.
 * type Street interface {
 *     CloseDoor()
 *     IsDoorOpen() bool
 *     MoveRight()
 * }
 */
func houseCount(s Street, k int) (ans int) {
    for !s.IsDoorOpen() {
        s.MoveRight()
    }
    for i := 1; i <= k; i++ {
        s.MoveRight()
        if s.IsDoorOpen() {
            ans = i
            s.CloseDoor()
        }
    }
    return
}

python3 解法, 执行用时: 1324 ms, 内存消耗: 24.3 MB, 提交时间: 2023-10-16 21:07:53

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

上一题