Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 05495d1

Browse files
feat: add solutions to lc problem: No.1052 (doocs#2559)
1 parent 6bee023 commit 05495d1

File tree

16 files changed

+298
-261
lines changed

16 files changed

+298
-261
lines changed

‎lcci/01.02.Check Permutation/README_EN.md‎

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,33 @@ var CheckPermutation = function (s1, s2) {
176176
};
177177
```
178178

179+
```swift
180+
class Solution {
181+
func CheckPermutation(_ s1: String, _ s2: String) -> Bool {
182+
if s1.count != s2.count {
183+
return false
184+
}
185+
186+
var cnt = Array(repeating: 0, count: 26)
187+
188+
for char in s1 {
189+
let index = Int(char.asciiValue! - Character("a").asciiValue!)
190+
cnt[index] += 1
191+
}
192+
193+
for char in s2 {
194+
let index = Int(char.asciiValue! - Character("a").asciiValue!)
195+
cnt[index] -= 1
196+
if cnt[index] < 0 {
197+
return false
198+
}
199+
}
200+
201+
return true
202+
}
203+
}
204+
```
205+
179206
<!-- tabs:end -->
180207

181208
### Solution 2: Sorting
@@ -242,33 +269,6 @@ impl Solution {
242269
}
243270
```
244271

245-
```swift
246-
class Solution {
247-
func CheckPermutation(_ s1: String, _ s2: String) -> Bool {
248-
if s1.count != s2.count {
249-
return false
250-
}
251-
252-
var cnt = Array(repeating: 0, count: 26)
253-
254-
for char in s1 {
255-
let index = Int(char.asciiValue! - Character("a").asciiValue!)
256-
cnt[index] += 1
257-
}
258-
259-
for char in s2 {
260-
let index = Int(char.asciiValue! - Character("a").asciiValue!)
261-
cnt[index] -= 1
262-
if cnt[index] < 0 {
263-
return false
264-
}
265-
}
266-
267-
return true
268-
}
269-
}
270-
```
271-
272272
<!-- tabs:end -->
273273

274274
<!-- end -->

‎solution/1000-1099/1052.Grumpy Bookstore Owner/README.md‎

Lines changed: 82 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,13 @@
4949

5050
### 方法一:滑动窗口
5151

52-
定义 $s$ 表示所有不满意的顾客总数,$cs$ 表示顾客总数。
52+
根据题目描述,我们只需要统计老板不生气时的客户数量 $tot,ドル再加上一个大小为 `minutes` 的滑动窗口中,老板生气时的客户数量的最大值 $mx$ 即可。
53+
54+
我们定义一个变量 $cnt$ 来记录滑动窗口中老板生气时的客户数量,初始值为前 `minutes` 分钟老板生气时的客户数量。然后我们遍历数组,每次移动滑动窗口时,更新 $cnt$ 的值,同时更新 $mx$ 的值。
55+
56+
最后返回 $tot + mx$ 即可。
57+
58+
时间复杂度 $O(n),ドル其中 $n$ 为数组 `customers` 的长度。空间复杂度 $O(1)$。
5359

5460
<!-- tabs:start -->
5561

@@ -58,36 +64,32 @@ class Solution:
5864
def maxSatisfied(
5965
self, customers: List[int], grumpy: List[int], minutes: int
6066
) -> int:
61-
s = sum(a * b for a, b in zip(customers, grumpy))
62-
cs = sum(customers)
63-
t = ans = 0
64-
for i, (a, b) in enumerate(zip(customers, grumpy), 1):
65-
t += a * b
66-
if (j := i - minutes) >= 0:
67-
ans = max(ans, cs - (s - t))
68-
t -= customers[j] * grumpy[j]
69-
return ans
67+
mx = cnt = sum(c * g for c, g in zip(customers[:minutes], grumpy))
68+
for i in range(minutes, len(customers)):
69+
cnt += customers[i] * grumpy[i]
70+
cnt -= customers[i - minutes] * grumpy[i - minutes]
71+
mx = max(mx, cnt)
72+
return sum(c * (g ^ 1) for c, g in zip(customers, grumpy)) + mx
7073
```
7174

7275
```java
7376
class Solution {
7477
public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
75-
int s =0, cs = 0;
76-
int n = customers.length;
77-
for (int i = 0; i < n; ++i) {
78-
s += customers[i] * grumpy[i];
79-
cs += customers[i];
78+
int cnt = 0;
79+
int tot = 0;
80+
for (int i = 0; i < minutes; ++i) {
81+
cnt += customers[i] * grumpy[i];
82+
tot += customers[i]* (grumpy[i] ^1);
8083
}
81-
int t = 0, ans = 0;
82-
for (int i = 0; i < n; ++i) {
83-
t += customers[i] * grumpy[i];
84-
int j = i - minutes + 1;
85-
if (j >= 0) {
86-
ans = Math.max(ans, cs - (s - t));
87-
t -= customers[j] * grumpy[j];
88-
}
84+
int mx = cnt;
85+
int n = customers.length;
86+
for (int i = minutes; i < n; ++i) {
87+
cnt += customers[i] * grumpy[i];
88+
cnt -= customers[i - minutes] * grumpy[i - minutes];
89+
mx = Math.max(mx, cnt);
90+
tot += customers[i] * (grumpy[i] ^ 1);
8991
}
90-
return ans;
92+
return tot + mx;
9193
}
9294
}
9395
```
@@ -96,76 +98,80 @@ class Solution {
9698
class Solution {
9799
public:
98100
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {
99-
int s = 0, cs = 0;
100-
int n = customers.size();
101-
for (int i = 0; i < n; ++i) {
102-
s += customers[i] * grumpy[i];
103-
cs += customers[i];
101+
int cnt = 0;
102+
int tot = 0;
103+
for (int i = 0; i < minutes; ++i) {
104+
cnt += customers[i] * grumpy[i];
105+
tot += customers[i] * (grumpy[i] ^ 1);
104106
}
105-
int t = 0, ans = 0;
106-
for (int i = 0; i < n; ++i) {
107-
t += customers[i] * grumpy[i];
108-
int j = i - minutes + 1;
109-
if (j >= 0) {
110-
ans = max(ans, cs - (s - t));
111-
t -= customers[j] * grumpy[j];
112-
}
107+
int mx = cnt;
108+
int n = customers.size();
109+
for (int i = minutes; i < n; ++i) {
110+
cnt += customers[i] * grumpy[i];
111+
cnt -= customers[i - minutes] * grumpy[i - minutes];
112+
mx = max(mx, cnt);
113+
tot += customers[i] * (grumpy[i] ^ 1);
113114
}
114-
return ans;
115+
return tot + mx;
115116
}
116117
};
117118
```
118119
119120
```go
120121
func maxSatisfied(customers []int, grumpy []int, minutes int) int {
121-
s, cs := 0, 0
122-
for i, c := range customers {
123-
s += c * grumpy[i]
124-
cs += c
122+
var cnt, tot int
123+
for i, c := range customers[:minutes] {
124+
cnt += c * grumpy[i]
125+
tot += c * (grumpy[i] ^ 1)
125126
}
126-
t, ans := 0, 0
127-
for i, c := range customers {
128-
t += c * grumpy[i]
129-
j := i - minutes + 1
130-
if j >= 0 {
131-
ans = max(ans, cs-(s-t))
132-
t -= customers[j] * grumpy[j]
133-
}
127+
mx := cnt
128+
for i := minutes; i < len(customers); i++ {
129+
cnt += customers[i] * grumpy[i]
130+
cnt -= customers[i-minutes] * grumpy[i-minutes]
131+
mx = max(mx, cnt)
132+
tot += customers[i] * (grumpy[i] ^ 1)
134133
}
135-
return ans
134+
return tot + mx
135+
}
136+
```
137+
138+
```ts
139+
function maxSatisfied(customers: number[], grumpy: number[], minutes: number): number {
140+
let [cnt, tot] = [0, 0];
141+
for (let i = 0; i < minutes; ++i) {
142+
cnt += customers[i] * grumpy[i];
143+
tot += customers[i] * (grumpy[i] ^ 1);
144+
}
145+
let mx = cnt;
146+
for (let i = minutes; i < customers.length; ++i) {
147+
cnt += customers[i] * grumpy[i];
148+
cnt -= customers[i - minutes] * grumpy[i - minutes];
149+
mx = Math.max(mx, cnt);
150+
tot += customers[i] * (grumpy[i] ^ 1);
151+
}
152+
return tot + mx;
136153
}
137154
```
138155

139156
```rust
140157
impl Solution {
141158
pub fn max_satisfied(customers: Vec<i32>, grumpy: Vec<i32>, minutes: i32) -> i32 {
142-
let k = minutes as usize;
143-
let n = customers.len();
144-
145-
let mut sum = 0;
146-
for i in 0..k {
147-
if grumpy[i] == 1 {
148-
sum += customers[i];
149-
}
150-
}
151-
let mut max = sum;
152-
for i in k..n {
153-
if grumpy[i - k] == 1 {
154-
sum -= customers[i - k];
155-
}
156-
if grumpy[i] == 1 {
157-
sum += customers[i];
158-
}
159-
max = max.max(sum);
159+
let mut cnt = 0;
160+
let mut tot = 0;
161+
let minutes = minutes as usize;
162+
for i in 0..minutes {
163+
cnt += customers[i] * grumpy[i];
164+
tot += customers[i] * (1 - grumpy[i]);
160165
}
161-
162-
sum = 0;
163-
for i in 0..n {
164-
if grumpy[i] == 0 {
165-
sum += customers[i];
166-
}
166+
let mut mx = cnt;
167+
let n = customers.len();
168+
for i in minutes..n {
169+
cnt += customers[i] * grumpy[i];
170+
cnt -= customers[i - minutes] * grumpy[i - minutes];
171+
mx = mx.max(cnt);
172+
tot += customers[i] * (1 - grumpy[i]);
167173
}
168-
sum + max
174+
tot + mx
169175
}
170176
}
171177
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /