Skip to content

Commit 0301dcc

Browse files
committed
feat: add solutions to lc problem: No.2070
No.2070.Most Beautiful Item for Each Query
1 parent d4eb02d commit 0301dcc

File tree

6 files changed

+296
-2
lines changed

6 files changed

+296
-2
lines changed

solution/2000-2099/2070.Most Beautiful Item for Each Query/README.md

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,124 @@
6060

6161
<!-- 这里可写通用的实现逻辑 -->
6262

63+
**方法一:排序 + 二分查找**
64+
6365
<!-- tabs:start -->
6466

6567
### **Python3**
6668

6769
<!-- 这里可写当前语言的特殊实现逻辑 -->
6870

6971
```python
70-
72+
class Solution:
73+
def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]:
74+
items.sort()
75+
n = len(items)
76+
prices = [p for p, _ in items]
77+
mx = [items[0][1]]
78+
for _, b in items[1:]:
79+
mx.append(max(mx[-1], b))
80+
ans = [0] * len(queries)
81+
for i, q in enumerate(queries):
82+
j = bisect_right(prices, q)
83+
if j:
84+
ans[i] = mx[j - 1]
85+
return ans
7186
```
7287

7388
### **Java**
7489

7590
<!-- 这里可写当前语言的特殊实现逻辑 -->
7691

7792
```java
93+
class Solution {
94+
public int[] maximumBeauty(int[][] items, int[] queries) {
95+
Arrays.sort(items, (a, b) -> a[0] - b[0]);
96+
for (int i = 1; i < items.length; ++i) {
97+
items[i][1] = Math.max(items[i - 1][1], items[i][1]);
98+
}
99+
int n = queries.length;
100+
int[] ans = new int[n];
101+
for (int i = 0; i < n; ++i) {
102+
int left = 0, right = items.length;
103+
while (left < right) {
104+
int mid = (left + right) >> 1;
105+
if (items[mid][0] > queries[i]) {
106+
right = mid;
107+
} else {
108+
left = mid + 1;
109+
}
110+
}
111+
if (left > 0) {
112+
ans[i] = items[left - 1][1];
113+
}
114+
}
115+
return ans;
116+
}
117+
}
118+
```
119+
120+
### **C++**
121+
122+
```cpp
123+
class Solution {
124+
public:
125+
vector<int> maximumBeauty(vector<vector<int>>& items, vector<int>& queries) {
126+
sort(items.begin(), items.end());
127+
for (int i = 1; i < items.size(); ++i) items[i][1] = max(items[i - 1][1], items[i][1]);
128+
int n = queries.size();
129+
vector<int> ans(n);
130+
for (int i = 0; i < n; ++i)
131+
{
132+
int left = 0, right = items.size();
133+
while (left < right)
134+
{
135+
int mid = (left + right) >> 1;
136+
if (items[mid][0] > queries[i]) right = mid;
137+
else left = mid + 1;
138+
}
139+
if (left) ans[i] = items[left - 1][1];
140+
}
141+
return ans;
142+
}
143+
};
144+
```
78145
146+
### **Go**
147+
148+
```go
149+
func maximumBeauty(items [][]int, queries []int) []int {
150+
sort.Slice(items, func(i, j int) bool {
151+
return items[i][0] < items[j][0]
152+
})
153+
for i := 1; i < len(items); i++ {
154+
items[i][1] = max(items[i-1][1], items[i][1])
155+
}
156+
n := len(queries)
157+
ans := make([]int, n)
158+
for i, v := range queries {
159+
left, right := 0, len(items)
160+
for left < right {
161+
mid := (left + right) >> 1
162+
if items[mid][0] > v {
163+
right = mid
164+
} else {
165+
left = mid + 1
166+
}
167+
}
168+
if left > 0 {
169+
ans[i] = items[left-1][1]
170+
}
171+
}
172+
return ans
173+
}
174+
175+
func max(a, b int) int {
176+
if a > b {
177+
return a
178+
}
179+
return b
180+
}
79181
```
80182

81183
### **...**

solution/2000-2099/2070.Most Beautiful Item for Each Query/README_EN.md

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,113 @@ Hence, the answer to the query is 0.
6262
### **Python3**
6363

6464
```python
65-
65+
class Solution:
66+
def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]:
67+
items.sort()
68+
n = len(items)
69+
prices = [p for p, _ in items]
70+
mx = [items[0][1]]
71+
for _, b in items[1:]:
72+
mx.append(max(mx[-1], b))
73+
ans = [0] * len(queries)
74+
for i, q in enumerate(queries):
75+
j = bisect_right(prices, q)
76+
if j:
77+
ans[i] = mx[j - 1]
78+
return ans
6679
```
6780

6881
### **Java**
6982

7083
```java
84+
class Solution {
85+
public int[] maximumBeauty(int[][] items, int[] queries) {
86+
Arrays.sort(items, (a, b) -> a[0] - b[0]);
87+
for (int i = 1; i < items.length; ++i) {
88+
items[i][1] = Math.max(items[i - 1][1], items[i][1]);
89+
}
90+
int n = queries.length;
91+
int[] ans = new int[n];
92+
for (int i = 0; i < n; ++i) {
93+
int left = 0, right = items.length;
94+
while (left < right) {
95+
int mid = (left + right) >> 1;
96+
if (items[mid][0] > queries[i]) {
97+
right = mid;
98+
} else {
99+
left = mid + 1;
100+
}
101+
}
102+
if (left > 0) {
103+
ans[i] = items[left - 1][1];
104+
}
105+
}
106+
return ans;
107+
}
108+
}
109+
```
110+
111+
### **C++**
112+
113+
```cpp
114+
class Solution {
115+
public:
116+
vector<int> maximumBeauty(vector<vector<int>>& items, vector<int>& queries) {
117+
sort(items.begin(), items.end());
118+
for (int i = 1; i < items.size(); ++i) items[i][1] = max(items[i - 1][1], items[i][1]);
119+
int n = queries.size();
120+
vector<int> ans(n);
121+
for (int i = 0; i < n; ++i)
122+
{
123+
int left = 0, right = items.size();
124+
while (left < right)
125+
{
126+
int mid = (left + right) >> 1;
127+
if (items[mid][0] > queries[i]) right = mid;
128+
else left = mid + 1;
129+
}
130+
if (left) ans[i] = items[left - 1][1];
131+
}
132+
return ans;
133+
}
134+
};
135+
```
71136
137+
### **Go**
138+
139+
```go
140+
func maximumBeauty(items [][]int, queries []int) []int {
141+
sort.Slice(items, func(i, j int) bool {
142+
return items[i][0] < items[j][0]
143+
})
144+
for i := 1; i < len(items); i++ {
145+
items[i][1] = max(items[i-1][1], items[i][1])
146+
}
147+
n := len(queries)
148+
ans := make([]int, n)
149+
for i, v := range queries {
150+
left, right := 0, len(items)
151+
for left < right {
152+
mid := (left + right) >> 1
153+
if items[mid][0] > v {
154+
right = mid
155+
} else {
156+
left = mid + 1
157+
}
158+
}
159+
if left > 0 {
160+
ans[i] = items[left-1][1]
161+
}
162+
}
163+
return ans
164+
}
165+
166+
func max(a, b int) int {
167+
if a > b {
168+
return a
169+
}
170+
return b
171+
}
72172
```
73173

74174
### **...**
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> maximumBeauty(vector<vector<int>>& items, vector<int>& queries) {
4+
sort(items.begin(), items.end());
5+
for (int i = 1; i < items.size(); ++i) items[i][1] = max(items[i - 1][1], items[i][1]);
6+
int n = queries.size();
7+
vector<int> ans(n);
8+
for (int i = 0; i < n; ++i)
9+
{
10+
int left = 0, right = items.size();
11+
while (left < right)
12+
{
13+
int mid = (left + right) >> 1;
14+
if (items[mid][0] > queries[i]) right = mid;
15+
else left = mid + 1;
16+
}
17+
if (left) ans[i] = items[left - 1][1];
18+
}
19+
return ans;
20+
}
21+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
func maximumBeauty(items [][]int, queries []int) []int {
2+
sort.Slice(items, func(i, j int) bool {
3+
return items[i][0] < items[j][0]
4+
})
5+
for i := 1; i < len(items); i++ {
6+
items[i][1] = max(items[i-1][1], items[i][1])
7+
}
8+
n := len(queries)
9+
ans := make([]int, n)
10+
for i, v := range queries {
11+
left, right := 0, len(items)
12+
for left < right {
13+
mid := (left + right) >> 1
14+
if items[mid][0] > v {
15+
right = mid
16+
} else {
17+
left = mid + 1
18+
}
19+
}
20+
if left > 0 {
21+
ans[i] = items[left-1][1]
22+
}
23+
}
24+
return ans
25+
}
26+
27+
func max(a, b int) int {
28+
if a > b {
29+
return a
30+
}
31+
return b
32+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public int[] maximumBeauty(int[][] items, int[] queries) {
3+
Arrays.sort(items, (a, b) -> a[0] - b[0]);
4+
for (int i = 1; i < items.length; ++i) {
5+
items[i][1] = Math.max(items[i - 1][1], items[i][1]);
6+
}
7+
int n = queries.length;
8+
int[] ans = new int[n];
9+
for (int i = 0; i < n; ++i) {
10+
int left = 0, right = items.length;
11+
while (left < right) {
12+
int mid = (left + right) >> 1;
13+
if (items[mid][0] > queries[i]) {
14+
right = mid;
15+
} else {
16+
left = mid + 1;
17+
}
18+
}
19+
if (left > 0) {
20+
ans[i] = items[left - 1][1];
21+
}
22+
}
23+
return ans;
24+
}
25+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]:
3+
items.sort()
4+
n = len(items)
5+
prices = [p for p, _ in items]
6+
mx = [items[0][1]]
7+
for _, b in items[1:]:
8+
mx.append(max(mx[-1], b))
9+
ans = [0] * len(queries)
10+
for i, q in enumerate(queries):
11+
j = bisect_right(prices, q)
12+
if j:
13+
ans[i] = mx[j - 1]
14+
return ans

0 commit comments

Comments
 (0)