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 1191ada

Browse files
feat: add solutions to lc problem: No.3479 (doocs#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)

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