-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path2483.商店的最少代价.java
101 lines (96 loc) · 2.58 KB
/
2483.商店的最少代价.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* @lc app=leetcode.cn id=2483 lang=java
*
* [2483] 商店的最少代价
*
* https://leetcode.cn/problems/minimum-penalty-for-a-shop/description/
*
* algorithms
* Medium (64.62%)
* Likes: 24
* Dislikes: 0
* Total Accepted: 6.8K
* Total Submissions: 10.6K
* Testcase Example: '"YYNY"'
*
* 给你一个顾客访问商店的日志,用一个下标从 0 开始且只包含字符 'N' 和 'Y' 的字符串 customers 表示:
*
*
* 如果第 i 个字符是 'Y' ,它表示第 i 小时有顾客到达。
* 如果第 i 个字符是 'N' ,它表示第 i 小时没有顾客到达。
*
*
* 如果商店在第 j 小时关门(0 <= j <= n),代价按如下方式计算:
*
*
* 在开门期间,如果某一个小时没有顾客到达,代价增加 1 。
* 在关门期间,如果某一个小时有顾客到达,代价增加 1 。
*
*
* 请你返回在确保代价 最小 的前提下,商店的 最早 关门时间。
*
* 注意,商店在第 j 小时关门表示在第 j 小时以及之后商店处于关门状态。
*
*
*
* 示例 1:
*
*
* 输入:customers = "YYNY"
* 输出:2
* 解释:
* - 第 0 小时关门,总共 1+1+0+1 = 3 代价。
* - 第 1 小时关门,总共 0+1+0+1 = 2 代价。
* - 第 2 小时关门,总共 0+0+0+1 = 1 代价。
* - 第 3 小时关门,总共 0+0+1+1 = 2 代价。
* - 第 4 小时关门,总共 0+0+1+0 = 1 代价。
* 在第 2 或第 4 小时关门代价都最小。由于第 2 小时更早,所以最优关门时间是 2 。
*
*
* 示例 2:
*
*
* 输入:customers = "NNNNN"
* 输出:0
* 解释:最优关门时间是 0 ,因为自始至终没有顾客到达。
*
* 示例 3:
*
*
* 输入:customers = "YYYY"
* 输出:4
* 解释:最优关门时间是 4 ,因为每一小时均有顾客到达。
*
*
*
*
* 提示:
*
*
* 1 <= customers.length <= 10^5
* customers 只包含字符 'Y' 和 'N' 。
*
*
*/
// @lc code=start
class Solution {
public int bestClosingTime(String customers) {
int n = customers.length(), max = 100005, result = 0;
char[] chars = customers.toCharArray();
int cost = 0;
for (int i = n; i >= 1; i--)
cost += (chars[i - 1] == 'Y' ? 1 : 0);
for (int i = 1; i <= n + 1; i++) {
if (cost < max) {
max = cost;
result = i - 1;
}
if (i <= n && chars[i - 1] == 'Y')
cost--;
else
cost++;
}
return result;
}
}
// @lc code=end