Skip to content

Commit 85c5909

Browse files
committed
feat: add solutions to lc problem: No.2250
No.2250.Count Number of Rectangles Containing Each Point
1 parent 2d1402e commit 85c5909

File tree

8 files changed

+405
-4
lines changed

8 files changed

+405
-4
lines changed

solution/2200-2299/2250.Count Number of Rectangles Containing Each Point/README.md

Lines changed: 115 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,73 @@
6363

6464
<!-- 这里可写通用的实现逻辑 -->
6565

66+
**方法一:排序 + 二分**
67+
6668
<!-- tabs:start -->
6769

6870
### **Python3**
6971

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

7274
```python
73-
75+
class Solution:
76+
def countRectangles(self, rectangles: List[List[int]], points: List[List[int]]) -> List[int]:
77+
d = defaultdict(list)
78+
for x, y in rectangles:
79+
d[y].append(x)
80+
for y in d.keys():
81+
d[y].sort()
82+
ans = []
83+
for x, y in points:
84+
cnt = 0
85+
for h in range(y, 101):
86+
xs = d[h]
87+
cnt += len(xs) - bisect_left(xs, x)
88+
ans.append(cnt)
89+
return ans
7490
```
7591

7692
### **Java**
7793

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

8096
```java
81-
97+
class Solution {
98+
public int[] countRectangles(int[][] rectangles, int[][] points) {
99+
int n = 101;
100+
List<Integer>[] d = new List[n];
101+
for (int i = 0; i < n; ++i) {
102+
d[i] = new ArrayList<>();
103+
}
104+
for (int[] r : rectangles) {
105+
d[r[1]].add(r[0]);
106+
}
107+
for (List<Integer> v : d) {
108+
Collections.sort(v);
109+
}
110+
int m = points.length;
111+
int[] ans = new int[m];
112+
for (int i = 0; i < m; ++i) {
113+
int x = points[i][0], y = points[i][1];
114+
int cnt = 0;
115+
for (int h = y; h < n; ++h) {
116+
List<Integer> xs = d[h];
117+
int left = 0, right = xs.size();
118+
while (left < right) {
119+
int mid = (left + right) >> 1;
120+
if (xs.get(mid) >= x) {
121+
right = mid;
122+
} else {
123+
left = mid + 1;
124+
}
125+
}
126+
cnt += xs.size() - left;
127+
}
128+
ans[i] = cnt;
129+
}
130+
return ans;
131+
}
132+
}
82133
```
83134

84135
### **TypeScript**
@@ -116,6 +167,68 @@ function countRectangles(rectangles: number[][], points: number[][]): number[] {
116167
}
117168
```
118169

170+
### **C++**
171+
172+
```cpp
173+
class Solution {
174+
public:
175+
vector<int> countRectangles(vector<vector<int>>& rectangles, vector<vector<int>>& points) {
176+
int n = 101;
177+
vector<vector<int>> d(n);
178+
for (auto& r : rectangles) d[r[1]].push_back(r[0]);
179+
for (auto& v : d) sort(v.begin(), v.end());
180+
vector<int> ans;
181+
for (auto& p : points)
182+
{
183+
int x = p[0], y = p[1];
184+
int cnt = 0;
185+
for (int h = y; h < n; ++h)
186+
{
187+
auto& xs = d[h];
188+
cnt += xs.size() - (lower_bound(xs.begin(), xs.end(), x) - xs.begin());
189+
}
190+
ans.push_back(cnt);
191+
}
192+
return ans;
193+
}
194+
};
195+
```
196+
197+
### **Go**
198+
199+
```go
200+
func countRectangles(rectangles [][]int, points [][]int) []int {
201+
n := 101
202+
d := make([][]int, 101)
203+
for _, r := range rectangles {
204+
d[r[1]] = append(d[r[1]], r[0])
205+
}
206+
for _, v := range d {
207+
sort.Ints(v)
208+
}
209+
var ans []int
210+
for _, p := range points {
211+
x, y := p[0], p[1]
212+
cnt := 0
213+
for h := y; h < n; h++ {
214+
xs := d[h]
215+
left, right := 0, len(xs)
216+
for left < right {
217+
mid := (left + right) >> 1
218+
if xs[mid] >= x {
219+
right = mid
220+
} else {
221+
left = mid + 1
222+
}
223+
}
224+
cnt += len(xs) - left
225+
}
226+
ans = append(ans, cnt)
227+
}
228+
return ans
229+
}
230+
```
231+
119232
### **...**
120233

121234
```

solution/2200-2299/2250.Count Number of Rectangles Containing Each Point/README_EN.md

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,62 @@ Therefore, we return [1, 3].
6060
### **Python3**
6161

6262
```python
63-
63+
class Solution:
64+
def countRectangles(self, rectangles: List[List[int]], points: List[List[int]]) -> List[int]:
65+
d = defaultdict(list)
66+
for x, y in rectangles:
67+
d[y].append(x)
68+
for y in d.keys():
69+
d[y].sort()
70+
ans = []
71+
for x, y in points:
72+
cnt = 0
73+
for h in range(y, 101):
74+
xs = d[h]
75+
cnt += len(xs) - bisect_left(xs, x)
76+
ans.append(cnt)
77+
return ans
6478
```
6579

6680
### **Java**
6781

6882
```java
69-
83+
class Solution {
84+
public int[] countRectangles(int[][] rectangles, int[][] points) {
85+
int n = 101;
86+
List<Integer>[] d = new List[n];
87+
for (int i = 0; i < n; ++i) {
88+
d[i] = new ArrayList<>();
89+
}
90+
for (int[] r : rectangles) {
91+
d[r[1]].add(r[0]);
92+
}
93+
for (List<Integer> v : d) {
94+
Collections.sort(v);
95+
}
96+
int m = points.length;
97+
int[] ans = new int[m];
98+
for (int i = 0; i < m; ++i) {
99+
int x = points[i][0], y = points[i][1];
100+
int cnt = 0;
101+
for (int h = y; h < n; ++h) {
102+
List<Integer> xs = d[h];
103+
int left = 0, right = xs.size();
104+
while (left < right) {
105+
int mid = (left + right) >> 1;
106+
if (xs.get(mid) >= x) {
107+
right = mid;
108+
} else {
109+
left = mid + 1;
110+
}
111+
}
112+
cnt += xs.size() - left;
113+
}
114+
ans[i] = cnt;
115+
}
116+
return ans;
117+
}
118+
}
70119
```
71120

72121
### **TypeScript**
@@ -104,6 +153,68 @@ function countRectangles(rectangles: number[][], points: number[][]): number[] {
104153
}
105154
```
106155

156+
### **C++**
157+
158+
```cpp
159+
class Solution {
160+
public:
161+
vector<int> countRectangles(vector<vector<int>>& rectangles, vector<vector<int>>& points) {
162+
int n = 101;
163+
vector<vector<int>> d(n);
164+
for (auto& r : rectangles) d[r[1]].push_back(r[0]);
165+
for (auto& v : d) sort(v.begin(), v.end());
166+
vector<int> ans;
167+
for (auto& p : points)
168+
{
169+
int x = p[0], y = p[1];
170+
int cnt = 0;
171+
for (int h = y; h < n; ++h)
172+
{
173+
auto& xs = d[h];
174+
cnt += xs.size() - (lower_bound(xs.begin(), xs.end(), x) - xs.begin());
175+
}
176+
ans.push_back(cnt);
177+
}
178+
return ans;
179+
}
180+
};
181+
```
182+
183+
### **Go**
184+
185+
```go
186+
func countRectangles(rectangles [][]int, points [][]int) []int {
187+
n := 101
188+
d := make([][]int, 101)
189+
for _, r := range rectangles {
190+
d[r[1]] = append(d[r[1]], r[0])
191+
}
192+
for _, v := range d {
193+
sort.Ints(v)
194+
}
195+
var ans []int
196+
for _, p := range points {
197+
x, y := p[0], p[1]
198+
cnt := 0
199+
for h := y; h < n; h++ {
200+
xs := d[h]
201+
left, right := 0, len(xs)
202+
for left < right {
203+
mid := (left + right) >> 1
204+
if xs[mid] >= x {
205+
right = mid
206+
} else {
207+
left = mid + 1
208+
}
209+
}
210+
cnt += len(xs) - left
211+
}
212+
ans = append(ans, cnt)
213+
}
214+
return ans
215+
}
216+
```
217+
107218
### **...**
108219

109220
```
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> countRectangles(vector<vector<int>>& rectangles, vector<vector<int>>& points) {
4+
int n = 101;
5+
vector<vector<int>> d(n);
6+
for (auto& r : rectangles) d[r[1]].push_back(r[0]);
7+
for (auto& v : d) sort(v.begin(), v.end());
8+
vector<int> ans;
9+
for (auto& p : points)
10+
{
11+
int x = p[0], y = p[1];
12+
int cnt = 0;
13+
for (int h = y; h < n; ++h)
14+
{
15+
auto& xs = d[h];
16+
cnt += xs.size() - (lower_bound(xs.begin(), xs.end(), x) - xs.begin());
17+
}
18+
ans.push_back(cnt);
19+
}
20+
return ans;
21+
}
22+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
func countRectangles(rectangles [][]int, points [][]int) []int {
2+
n := 101
3+
d := make([][]int, 101)
4+
for _, r := range rectangles {
5+
d[r[1]] = append(d[r[1]], r[0])
6+
}
7+
for _, v := range d {
8+
sort.Ints(v)
9+
}
10+
var ans []int
11+
for _, p := range points {
12+
x, y := p[0], p[1]
13+
cnt := 0
14+
for h := y; h < n; h++ {
15+
xs := d[h]
16+
left, right := 0, len(xs)
17+
for left < right {
18+
mid := (left + right) >> 1
19+
if xs[mid] >= x {
20+
right = mid
21+
} else {
22+
left = mid + 1
23+
}
24+
}
25+
cnt += len(xs) - left
26+
}
27+
ans = append(ans, cnt)
28+
}
29+
return ans
30+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution {
2+
public int[] countRectangles(int[][] rectangles, int[][] points) {
3+
int n = 101;
4+
List<Integer>[] d = new List[n];
5+
for (int i = 0; i < n; ++i) {
6+
d[i] = new ArrayList<>();
7+
}
8+
for (int[] r : rectangles) {
9+
d[r[1]].add(r[0]);
10+
}
11+
for (List<Integer> v : d) {
12+
Collections.sort(v);
13+
}
14+
int m = points.length;
15+
int[] ans = new int[m];
16+
for (int i = 0; i < m; ++i) {
17+
int x = points[i][0], y = points[i][1];
18+
int cnt = 0;
19+
for (int h = y; h < n; ++h) {
20+
List<Integer> xs = d[h];
21+
int left = 0, right = xs.size();
22+
while (left < right) {
23+
int mid = (left + right) >> 1;
24+
if (xs.get(mid) >= x) {
25+
right = mid;
26+
} else {
27+
left = mid + 1;
28+
}
29+
}
30+
cnt += xs.size() - left;
31+
}
32+
ans[i] = cnt;
33+
}
34+
return ans;
35+
}
36+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def countRectangles(self, rectangles: List[List[int]], points: List[List[int]]) -> List[int]:
3+
d = defaultdict(list)
4+
for x, y in rectangles:
5+
d[y].append(x)
6+
for y in d.keys():
7+
d[y].sort()
8+
ans = []
9+
for x, y in points:
10+
cnt = 0
11+
for h in range(y, 101):
12+
xs = d[h]
13+
cnt += len(xs) - bisect_left(xs, x)
14+
ans.append(cnt)
15+
return ans

0 commit comments

Comments
 (0)