Skip to content

Commit 1191ada

Browse files
authored
feat: add solutions to lc problem: No.3479 (#4622)
No.3479.Fruits Into Baskets III
1 parent 5920db5 commit 1191ada

File tree

4 files changed

+446
-0
lines changed

4 files changed

+446
-0
lines changed

solution/3400-3499/3479.Fruits Into Baskets III/README.md

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,158 @@ impl Solution {
539539
}
540540
```
541541

542+
#### C#
543+
544+
```cs
545+
public class SegmentTree {
546+
int[] nums;
547+
int[] tr;
548+
549+
public SegmentTree(int[] nums) {
550+
this.nums = nums;
551+
int n = nums.Length;
552+
this.tr = new int[n << 2];
553+
Build(1, 1, n);
554+
}
555+
556+
public void Build(int u, int l, int r) {
557+
if (l == r) {
558+
tr[u] = nums[l - 1];
559+
return;
560+
}
561+
int mid = (l + r) >> 1;
562+
Build(u << 1, l, mid);
563+
Build(u << 1 | 1, mid + 1, r);
564+
Pushup(u);
565+
}
566+
567+
public void Modify(int u, int l, int r, int i, int v) {
568+
if (l == r) {
569+
tr[u] = v;
570+
return;
571+
}
572+
int mid = (l + r) >> 1;
573+
if (i <= mid) {
574+
Modify(u << 1, l, mid, i, v);
575+
} else {
576+
Modify(u << 1 | 1, mid + 1, r, i, v);
577+
}
578+
Pushup(u);
579+
}
580+
581+
public int Query(int u, int l, int r, int v) {
582+
if (tr[u] < v) {
583+
return -1;
584+
}
585+
if (l == r) {
586+
return l;
587+
}
588+
int mid = (l + r) >> 1;
589+
if (tr[u << 1] >= v) {
590+
return Query(u << 1, l, mid, v);
591+
}
592+
return Query(u << 1 | 1, mid + 1, r, v);
593+
}
594+
595+
public void Pushup(int u) {
596+
tr[u] = Math.Max(tr[u << 1], tr[u << 1 | 1]);
597+
}
598+
}
599+
600+
public class Solution {
601+
public int NumOfUnplacedFruits(int[] fruits, int[] baskets) {
602+
SegmentTree tree = new SegmentTree(baskets);
603+
int n = baskets.Length;
604+
int ans = 0;
605+
foreach (var x in fruits) {
606+
int i = tree.Query(1, 1, n, x);
607+
if (i < 0) {
608+
ans++;
609+
} else {
610+
tree.Modify(1, 1, n, i, 0);
611+
}
612+
}
613+
return ans;
614+
}
615+
}
616+
```
617+
618+
#### Swift
619+
620+
```swift
621+
class SegmentTree {
622+
var nums: [Int]
623+
var tr: [Int]
624+
625+
init(_ nums: [Int]) {
626+
self.nums = nums
627+
let n = nums.count
628+
self.tr = [Int](repeating: 0, count: n << 2)
629+
build(1, 1, n)
630+
}
631+
632+
func build(_ u: Int, _ l: Int, _ r: Int) {
633+
if l == r {
634+
tr[u] = nums[l - 1]
635+
return
636+
}
637+
let mid = (l + r) >> 1
638+
build(u << 1, l, mid)
639+
build(u << 1 | 1, mid + 1, r)
640+
pushup(u)
641+
}
642+
643+
func modify(_ u: Int, _ l: Int, _ r: Int, _ i: Int, _ v: Int) {
644+
if l == r {
645+
tr[u] = v
646+
return
647+
}
648+
let mid = (l + r) >> 1
649+
if i <= mid {
650+
modify(u << 1, l, mid, i, v)
651+
} else {
652+
modify(u << 1 | 1, mid + 1, r, i, v)
653+
}
654+
pushup(u)
655+
}
656+
657+
func query(_ u: Int, _ l: Int, _ r: Int, _ v: Int) -> Int {
658+
if tr[u] < v {
659+
return -1
660+
}
661+
if l == r {
662+
return l
663+
}
664+
let mid = (l + r) >> 1
665+
if tr[u << 1] >= v {
666+
return query(u << 1, l, mid, v)
667+
}
668+
return query(u << 1 | 1, mid + 1, r, v)
669+
}
670+
671+
func pushup(_ u: Int) {
672+
tr[u] = max(tr[u << 1], tr[u << 1 | 1])
673+
}
674+
}
675+
676+
class Solution {
677+
func numOfUnplacedFruits(_ fruits: [Int], _ baskets: [Int]) -> Int {
678+
let tree = SegmentTree(baskets)
679+
let n = baskets.count
680+
var ans = 0
681+
for x in fruits {
682+
let i = tree.query(1, 1, n, x)
683+
if i < 0 {
684+
ans += 1
685+
} else {
686+
tree.modify(1, 1, n, i, 0)
687+
}
688+
}
689+
return ans
690+
}
691+
}
692+
```
693+
542694
<!-- tabs:end -->
543695

544696
<!-- solution:end -->

solution/3400-3499/3479.Fruits Into Baskets III/README_EN.md

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,158 @@ impl Solution {
536536
}
537537
```
538538

539+
#### C#
540+
541+
```cs
542+
public class SegmentTree {
543+
int[] nums;
544+
int[] tr;
545+
546+
public SegmentTree(int[] nums) {
547+
this.nums = nums;
548+
int n = nums.Length;
549+
this.tr = new int[n << 2];
550+
Build(1, 1, n);
551+
}
552+
553+
public void Build(int u, int l, int r) {
554+
if (l == r) {
555+
tr[u] = nums[l - 1];
556+
return;
557+
}
558+
int mid = (l + r) >> 1;
559+
Build(u << 1, l, mid);
560+
Build(u << 1 | 1, mid + 1, r);
561+
Pushup(u);
562+
}
563+
564+
public void Modify(int u, int l, int r, int i, int v) {
565+
if (l == r) {
566+
tr[u] = v;
567+
return;
568+
}
569+
int mid = (l + r) >> 1;
570+
if (i <= mid) {
571+
Modify(u << 1, l, mid, i, v);
572+
} else {
573+
Modify(u << 1 | 1, mid + 1, r, i, v);
574+
}
575+
Pushup(u);
576+
}
577+
578+
public int Query(int u, int l, int r, int v) {
579+
if (tr[u] < v) {
580+
return -1;
581+
}
582+
if (l == r) {
583+
return l;
584+
}
585+
int mid = (l + r) >> 1;
586+
if (tr[u << 1] >= v) {
587+
return Query(u << 1, l, mid, v);
588+
}
589+
return Query(u << 1 | 1, mid + 1, r, v);
590+
}
591+
592+
public void Pushup(int u) {
593+
tr[u] = Math.Max(tr[u << 1], tr[u << 1 | 1]);
594+
}
595+
}
596+
597+
public class Solution {
598+
public int NumOfUnplacedFruits(int[] fruits, int[] baskets) {
599+
SegmentTree tree = new SegmentTree(baskets);
600+
int n = baskets.Length;
601+
int ans = 0;
602+
foreach (var x in fruits) {
603+
int i = tree.Query(1, 1, n, x);
604+
if (i < 0) {
605+
ans++;
606+
} else {
607+
tree.Modify(1, 1, n, i, 0);
608+
}
609+
}
610+
return ans;
611+
}
612+
}
613+
```
614+
615+
#### Swift
616+
617+
```swift
618+
class SegmentTree {
619+
var nums: [Int]
620+
var tr: [Int]
621+
622+
init(_ nums: [Int]) {
623+
self.nums = nums
624+
let n = nums.count
625+
self.tr = [Int](repeating: 0, count: n << 2)
626+
build(1, 1, n)
627+
}
628+
629+
func build(_ u: Int, _ l: Int, _ r: Int) {
630+
if l == r {
631+
tr[u] = nums[l - 1]
632+
return
633+
}
634+
let mid = (l + r) >> 1
635+
build(u << 1, l, mid)
636+
build(u << 1 | 1, mid + 1, r)
637+
pushup(u)
638+
}
639+
640+
func modify(_ u: Int, _ l: Int, _ r: Int, _ i: Int, _ v: Int) {
641+
if l == r {
642+
tr[u] = v
643+
return
644+
}
645+
let mid = (l + r) >> 1
646+
if i <= mid {
647+
modify(u << 1, l, mid, i, v)
648+
} else {
649+
modify(u << 1 | 1, mid + 1, r, i, v)
650+
}
651+
pushup(u)
652+
}
653+
654+
func query(_ u: Int, _ l: Int, _ r: Int, _ v: Int) -> Int {
655+
if tr[u] < v {
656+
return -1
657+
}
658+
if l == r {
659+
return l
660+
}
661+
let mid = (l + r) >> 1
662+
if tr[u << 1] >= v {
663+
return query(u << 1, l, mid, v)
664+
}
665+
return query(u << 1 | 1, mid + 1, r, v)
666+
}
667+
668+
func pushup(_ u: Int) {
669+
tr[u] = max(tr[u << 1], tr[u << 1 | 1])
670+
}
671+
}
672+
673+
class Solution {
674+
func numOfUnplacedFruits(_ fruits: [Int], _ baskets: [Int]) -> Int {
675+
let tree = SegmentTree(baskets)
676+
let n = baskets.count
677+
var ans = 0
678+
for x in fruits {
679+
let i = tree.query(1, 1, n, x)
680+
if i < 0 {
681+
ans += 1
682+
} else {
683+
tree.modify(1, 1, n, i, 0)
684+
}
685+
}
686+
return ans
687+
}
688+
}
689+
```
690+
539691
<!-- tabs:end -->
540692

541693
<!-- solution:end -->
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
public class SegmentTree {
2+
int[] nums;
3+
int[] tr;
4+
5+
public SegmentTree(int[] nums) {
6+
this.nums = nums;
7+
int n = nums.Length;
8+
this.tr = new int[n << 2];
9+
Build(1, 1, n);
10+
}
11+
12+
public void Build(int u, int l, int r) {
13+
if (l == r) {
14+
tr[u] = nums[l - 1];
15+
return;
16+
}
17+
int mid = (l + r) >> 1;
18+
Build(u << 1, l, mid);
19+
Build(u << 1 | 1, mid + 1, r);
20+
Pushup(u);
21+
}
22+
23+
public void Modify(int u, int l, int r, int i, int v) {
24+
if (l == r) {
25+
tr[u] = v;
26+
return;
27+
}
28+
int mid = (l + r) >> 1;
29+
if (i <= mid) {
30+
Modify(u << 1, l, mid, i, v);
31+
} else {
32+
Modify(u << 1 | 1, mid + 1, r, i, v);
33+
}
34+
Pushup(u);
35+
}
36+
37+
public int Query(int u, int l, int r, int v) {
38+
if (tr[u] < v) {
39+
return -1;
40+
}
41+
if (l == r) {
42+
return l;
43+
}
44+
int mid = (l + r) >> 1;
45+
if (tr[u << 1] >= v) {
46+
return Query(u << 1, l, mid, v);
47+
}
48+
return Query(u << 1 | 1, mid + 1, r, v);
49+
}
50+
51+
public void Pushup(int u) {
52+
tr[u] = Math.Max(tr[u << 1], tr[u << 1 | 1]);
53+
}
54+
}
55+
56+
public class Solution {
57+
public int NumOfUnplacedFruits(int[] fruits, int[] baskets) {
58+
SegmentTree tree = new SegmentTree(baskets);
59+
int n = baskets.Length;
60+
int ans = 0;
61+
foreach (var x in fruits) {
62+
int i = tree.Query(1, 1, n, x);
63+
if (i < 0) {
64+
ans++;
65+
} else {
66+
tree.Modify(1, 1, n, i, 0);
67+
}
68+
}
69+
return ans;
70+
}
71+
}

0 commit comments

Comments
 (0)