2025-01-05:候诊室中的最少椅子数。用go语言,给定一个字符串 s,模拟每秒发生的事件 i: 1.当 s[i] 为 ‘E
2025-01-05:候诊室中的最少椅子数。用go语言,给定一个字符串 s,模拟每秒发生的事件 i:
1.当 s[i] 为 ‘E’,表示一位顾客进入候诊室并占用一把椅子。
2.当 s[i] 为 ‘L’,表示一位顾客离开候诊室,释放一把椅子。
请计算并返回为确保每位进入候诊室的顾客都有座位所需的最少椅子数量,假设候诊室一开始是空的。
1 <= s.length <= 50。
s 仅由字母 ‘E’ 和 ‘L’ 组成。
s 表示一个有效的进出序列。
输入:s = “EEEEEEE”。
输出:7。
解释:
每秒后都有一个顾客进入候诊室,没有人离开。因此,至少需要 7 把椅子。
答案2025-01-05:
题目来自leetcode3168。
大体步骤如下:
-
函数
minimumChairs
接收一个字符串s
,代表顾客进出候诊室的情况。初始化变量cnt
为0,用于跟踪当前正在使用的椅子数量。另外,初始将答案ans
设为0。 -
开始遍历字符串
s
中的每个字符c
。 -
对于每个字符
c
,检查它是否为 ‘E’,代表有顾客进入候诊室。如果是,则将cnt
值加一,表示多占用一个椅子,然后将ans
更新为当前ans
与cnt
的最大值。这样可以记录候诊室中需要的最多椅子数量。 -
如果字符
c
不是 ‘E’,则表示有顾客离开,此时将cnt
值减一,释放一个椅子。 -
遍历完成后,返回最终的
ans
即为确保每位进入候诊室的顾客都有座位所需的最少椅子数量。
总结:
-
时间复杂度:遍历字符串
s
的时间复杂度为 O(N),其中 N 为字符串s
的长度。 -
空间复杂度:除了输入参数外,只使用了常数级的额外空间,因此空间复杂度为 O(1)。
Go完整代码如下:
package main
import (
"fmt"
)
func minimumChairs(s string) (ans int) {
cnt := 0
for _, c := range s {
if c == 'E' {
cnt++
ans = max(ans, cnt)
} else {
cnt--
}
}
return
}
func main() {
s := "EEEEEEE"
result := minimumChairs(s)
fmt.Println(result)
}
Rust完整代码如下:
fn minimum_chairs(s: &str) -> i32 {
let mut cnt = 0;
let mut ans = 0;
for c in s.chars() {
if c == 'E' {
cnt += 1;
ans = ans.max(cnt);
} else {
cnt -= 1;
}
}
ans
}
fn main() {
let s = "EEEEEEE";
let result = minimum_chairs(s);
println!("{}", result);
}
C完整代码如下:
#include <stdio.h>
#include <string.h>
int max(int a, int b) {
return a > b ? a : b;
}
int minimum_chairs(const char* s) {
int cnt = 0;
int ans = 0;
for (int i = 0; i < strlen(s); i++) {
if (s[i] == 'E') {
cnt++;
ans = max(ans, cnt);
}
else {
cnt--;
}
}
return ans;
}
int main() {
const char* s = "EEEEEEE";
int result = minimum_chairs(s);
printf("%d\n", result);
return 0;
}
C++完整代码如下:
#include <iostream>
#include <string>
#include <algorithm>
int minimumChairs(const std::string& s) {
int cnt = 0;
int ans = 0;
for (char c : s) {
if (c == 'E') {
cnt++;
ans = std::max(ans, cnt);
}
else {
cnt--;
}
}
return ans;
}
int main() {
std::string s = "EEEEEEE";
int result = minimumChairs(s);
std::cout << result << std::endl;
return 0;
}
Python完整代码如下:
# -*-coding:utf-8-*-
def minimum_chairs(s: str) -> int:
cnt = 0
ans = 0
for c in s:
if c == 'E':
cnt += 1
ans = max(ans, cnt)
else:
cnt -= 1
return ans
if __name__ == "__main__":
s = "EEEEEEE"
result = minimum_chairs(s)
print(result)
Shell完整代码如下:
#!/bin/bash
# 计算所需的最小椅子数量
function minimum_chairs {
local s="$1"
local cnt=0
local ans=0
for (( i=0; i<${#s}; i++ )); do
local c="${s:i:1}"
if [[ "$c" == "E" ]]; then
((cnt++))
if (( cnt > ans )); then
ans=$cnt
fi
else
((cnt--))
fi
done
echo "$ans"
}
# 主函数
function main {
local s="EEEEEEE"
local result
result=$(minimum_chairs "$s")
echo "$result"
}
# 调用主函数
main
- 点赞
- 收藏
- 关注作者
评论(0)