Skip to content

Commit 9d43848

Browse files
committed
feat: add solutions to lc problem: No.0904
No.0904.Fruit Into Baskets
1 parent ec01a10 commit 9d43848

File tree

4 files changed

+221
-0
lines changed

4 files changed

+221
-0
lines changed

solution/0900-0999/0904.Fruit Into Baskets/README.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,102 @@ func totalFruit(fruits []int) int {
273273
}
274274
```
275275

276+
### **TypeScript**
277+
278+
```ts
279+
function totalFruit(fruits: number[]): number {
280+
const n = fruits.length;
281+
const map = new Map<number, number>();
282+
let res = 0;
283+
let left = 0;
284+
let right = 0;
285+
while (right < n) {
286+
map.set(fruits[right], (map.get(fruits[right]) ?? 0) + 1);
287+
right++;
288+
while (map.size > 2) {
289+
const k = fruits[left++];
290+
map.set(k, map.get(k) - 1);
291+
if (map.get(k) === 0) {
292+
map.delete(k);
293+
}
294+
}
295+
res = Math.max(res, right - left);
296+
}
297+
return res;
298+
}
299+
```
300+
301+
```ts
302+
function totalFruit(fruits: number[]): number {
303+
const n = fruits.length;
304+
const map = new Map<number, number>();
305+
let i = 0;
306+
for (const fruit of fruits) {
307+
map.set(fruit, (map.get(fruit) ?? 0) + 1);
308+
if (map.size > 2) {
309+
const k = fruits[i++];
310+
map.set(k, map.get(k) - 1);
311+
if (map.get(k) == 0) {
312+
map.delete(k);
313+
}
314+
}
315+
}
316+
return n - i;
317+
}
318+
```
319+
320+
### **Rust**
321+
322+
```rust
323+
use std::collections::HashMap;
324+
impl Solution {
325+
pub fn total_fruit(fruits: Vec<i32>) -> i32 {
326+
let n = fruits.len();
327+
let mut map = HashMap::new();
328+
let mut res = 0;
329+
let mut left = 0;
330+
let mut right = 0;
331+
while right < n {
332+
*map.entry(fruits[right]).or_insert(0) += 1;
333+
right += 1;
334+
while map.len() > 2 {
335+
let k = fruits[left];
336+
map.insert(k, map[&k] - 1);
337+
if map[&k] == 0 {
338+
map.remove(&k);
339+
}
340+
left += 1;
341+
}
342+
res = res.max(right - left);
343+
}
344+
res as i32
345+
}
346+
}
347+
```
348+
349+
```rust
350+
use std::collections::HashMap;
351+
impl Solution {
352+
pub fn total_fruit(fruits: Vec<i32>) -> i32 {
353+
let n = fruits.len();
354+
let mut map = HashMap::new();
355+
let mut i = 0;
356+
for &fruit in fruits.iter() {
357+
*map.entry(fruit).or_insert(0) += 1;
358+
if map.len() > 2 {
359+
let k = fruits[i];
360+
map.insert(k, map[&k] - 1);
361+
if map[&k] == 0 {
362+
map.remove(&k);
363+
}
364+
i += 1;
365+
}
366+
}
367+
(n - i) as i32
368+
}
369+
}
370+
```
371+
276372
### **...**
277373

278374
```

solution/0900-0999/0904.Fruit Into Baskets/README_EN.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,102 @@ func totalFruit(fruits []int) int {
221221
}
222222
```
223223

224+
### **TypeScript**
225+
226+
```ts
227+
function totalFruit(fruits: number[]): number {
228+
const n = fruits.length;
229+
const map = new Map<number, number>();
230+
let res = 0;
231+
let left = 0;
232+
let right = 0;
233+
while (right < n) {
234+
map.set(fruits[right], (map.get(fruits[right]) ?? 0) + 1);
235+
right++;
236+
while (map.size > 2) {
237+
const k = fruits[left++];
238+
map.set(k, map.get(k) - 1);
239+
if (map.get(k) === 0) {
240+
map.delete(k);
241+
}
242+
}
243+
res = Math.max(res, right - left);
244+
}
245+
return res;
246+
}
247+
```
248+
249+
```ts
250+
function totalFruit(fruits: number[]): number {
251+
const n = fruits.length;
252+
const map = new Map<number, number>();
253+
let i = 0;
254+
for (const fruit of fruits) {
255+
map.set(fruit, (map.get(fruit) ?? 0) + 1);
256+
if (map.size > 2) {
257+
const k = fruits[i++];
258+
map.set(k, map.get(k) - 1);
259+
if (map.get(k) == 0) {
260+
map.delete(k);
261+
}
262+
}
263+
}
264+
return n - i;
265+
}
266+
```
267+
268+
### **Rust**
269+
270+
```rust
271+
use std::collections::HashMap;
272+
impl Solution {
273+
pub fn total_fruit(fruits: Vec<i32>) -> i32 {
274+
let n = fruits.len();
275+
let mut map = HashMap::new();
276+
let mut res = 0;
277+
let mut left = 0;
278+
let mut right = 0;
279+
while right < n {
280+
*map.entry(fruits[right]).or_insert(0) += 1;
281+
right += 1;
282+
while map.len() > 2 {
283+
let k = fruits[left];
284+
map.insert(k, map[&k] - 1);
285+
if map[&k] == 0 {
286+
map.remove(&k);
287+
}
288+
left += 1;
289+
}
290+
res = res.max(right - left);
291+
}
292+
res as i32
293+
}
294+
}
295+
```
296+
297+
```rust
298+
use std::collections::HashMap;
299+
impl Solution {
300+
pub fn total_fruit(fruits: Vec<i32>) -> i32 {
301+
let n = fruits.len();
302+
let mut map = HashMap::new();
303+
let mut i = 0;
304+
for &fruit in fruits.iter() {
305+
*map.entry(fruit).or_insert(0) += 1;
306+
if map.len() > 2 {
307+
let k = fruits[i];
308+
map.insert(k, map[&k] - 1);
309+
if map[&k] == 0 {
310+
map.remove(&k);
311+
}
312+
i += 1;
313+
}
314+
}
315+
(n - i) as i32
316+
}
317+
}
318+
```
319+
224320
### **...**
225321

226322
```
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def totalFruit(self, fruits: List[int]) -> int:
3+
cnt = Counter()
4+
j = 0
5+
for x in fruits:
6+
cnt[x] += 1
7+
if len(cnt) > 2:
8+
y = fruits[j]
9+
cnt[y] -= 1
10+
if cnt[y] == 0:
11+
cnt.pop(y)
12+
j += 1
13+
return len(fruits) - j
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function totalFruit(fruits: number[]): number {
2+
const n = fruits.length;
3+
const map = new Map<number, number>();
4+
let i = 0;
5+
for (const fruit of fruits) {
6+
map.set(fruit, (map.get(fruit) ?? 0) + 1);
7+
if (map.size > 2) {
8+
const k = fruits[i++];
9+
map.set(k, map.get(k) - 1);
10+
if (map.get(k) == 0) {
11+
map.delete(k);
12+
}
13+
}
14+
}
15+
return n - i;
16+
}

0 commit comments

Comments
 (0)