Skip to content

Commit 2815f83

Browse files
committed
feat: update solutions to lc problems
* No.0497.Random Point in Non-overlapping Rectangles * No.2294.Partition Array Such That Maximum Difference Is K
1 parent 2fce58e commit 2815f83

File tree

7 files changed

+17
-55
lines changed

7 files changed

+17
-55
lines changed

solution/0400-0499/0497.Random Point in Non-overlapping Rectangles/README.md

+7-19
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ solution.pick(); // 返回 [0, 0]</pre>
6464

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

67-
前缀和 + 二分查找
67+
**方法一:前缀和 + 二分查找**
6868

69-
将矩形面积求前缀和 s,然后随机获取到一个面积 v,利用二分查找定位到是哪个矩形,然后继续随机获取该矩形的其中一个整数点坐标即可。
69+
将矩形面积求前缀和 $s$,然后随机获取到一个面积 $v$,利用二分查找定位到是哪个矩形,然后继续随机获取该矩形的其中一个整数点坐标即可。
7070

7171
<!-- tabs:start -->
7272

@@ -85,14 +85,8 @@ class Solution:
8585

8686
def pick(self) -> List[int]:
8787
v = random.randint(1, self.s[-1])
88-
left, right = 0, len(self.s) - 1
89-
while left < right:
90-
mid = (left + right) >> 1
91-
if self.s[mid] >= v:
92-
right = mid
93-
else:
94-
left = mid + 1
95-
x1, y1, x2, y2 = self.rects[left]
88+
idx = bisect_left(self.s, v)
89+
x1, y1, x2, y2 = self.rects[idx]
9690
return [random.randint(x1, x2), random.randint(y1, y2)]
9791

9892

@@ -159,18 +153,12 @@ public:
159153
this->rects = rects;
160154
srand(time(nullptr));
161155
}
162-
156+
163157
vector<int> pick() {
164158
int n = rects.size();
165159
int v = 1 + rand() % s[n];
166-
int left = 0, right = n;
167-
while (left < right)
168-
{
169-
int mid = (left + right) >> 1;
170-
if (s[mid] >= v) right = mid;
171-
else left = mid + 1;
172-
}
173-
auto& rect = rects[left - 1];
160+
int idx = lower_bound(s.begin(), s.end(), v) - s.begin();
161+
auto& rect = rects[idx - 1];
174162
int x = rect[0] + rand() % (rect[2] - rect[0] + 1);
175163
int y = rect[1] + rand() % (rect[3] - rect[1] + 1);
176164
return {x, y};

solution/0400-0499/0497.Random Point in Non-overlapping Rectangles/README_EN.md

+5-17
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,8 @@ class Solution:
6868

6969
def pick(self) -> List[int]:
7070
v = random.randint(1, self.s[-1])
71-
left, right = 0, len(self.s) - 1
72-
while left < right:
73-
mid = (left + right) >> 1
74-
if self.s[mid] >= v:
75-
right = mid
76-
else:
77-
left = mid + 1
78-
x1, y1, x2, y2 = self.rects[left]
71+
idx = bisect_left(self.s, v)
72+
x1, y1, x2, y2 = self.rects[idx]
7973
return [random.randint(x1, x2), random.randint(y1, y2)]
8074

8175

@@ -140,18 +134,12 @@ public:
140134
this->rects = rects;
141135
srand(time(nullptr));
142136
}
143-
137+
144138
vector<int> pick() {
145139
int n = rects.size();
146140
int v = 1 + rand() % s[n];
147-
int left = 0, right = n;
148-
while (left < right)
149-
{
150-
int mid = (left + right) >> 1;
151-
if (s[mid] >= v) right = mid;
152-
else left = mid + 1;
153-
}
154-
auto& rect = rects[left - 1];
141+
int idx = lower_bound(s.begin(), s.end(), v) - s.begin();
142+
auto& rect = rects[idx - 1];
155143
int x = rect[0] + rand() % (rect[2] - rect[0] + 1);
156144
int y = rect[1] + rand() % (rect[3] - rect[1] + 1);
157145
return {x, y};

solution/0400-0499/0497.Random Point in Non-overlapping Rectangles/Solution.cpp

+2-8
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,8 @@ class Solution {
1414
vector<int> pick() {
1515
int n = rects.size();
1616
int v = 1 + rand() % s[n];
17-
int left = 0, right = n;
18-
while (left < right)
19-
{
20-
int mid = (left + right) >> 1;
21-
if (s[mid] >= v) right = mid;
22-
else left = mid + 1;
23-
}
24-
auto& rect = rects[left - 1];
17+
int idx = lower_bound(s.begin(), s.end(), v) - s.begin();
18+
auto& rect = rects[idx - 1];
2519
int x = rect[0] + rand() % (rect[2] - rect[0] + 1);
2620
int y = rect[1] + rand() % (rect[3] - rect[1] + 1);
2721
return {x, y};

solution/0400-0499/0497.Random Point in Non-overlapping Rectangles/Solution.py

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
class Solution:
2+
23
def __init__(self, rects: List[List[int]]):
34
self.rects = rects
45
self.s = [0] * len(rects)
@@ -7,14 +8,8 @@ def __init__(self, rects: List[List[int]]):
78

89
def pick(self) -> List[int]:
910
v = random.randint(1, self.s[-1])
10-
left, right = 0, len(self.s) - 1
11-
while left < right:
12-
mid = (left + right) >> 1
13-
if self.s[mid] >= v:
14-
right = mid
15-
else:
16-
left = mid + 1
17-
x1, y1, x2, y2 = self.rects[left]
11+
idx = bisect_left(self.s, v)
12+
x1, y1, x2, y2 = self.rects[idx]
1813
return [random.randint(x1, x2), random.randint(y1, y2)]
1914

2015

solution/2200-2299/2294.Partition Array Such That Maximum Difference Is K/README.md

-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ func partitionArray(nums []int, k int) int {
158158

159159
```ts
160160
function partitionArray(nums: number[], k: number): number {
161-
if (!nums.length) return 0;
162161
nums.sort((a, b) => a - b);
163162
let ans = 1;
164163
let prev = nums[0] + k;

solution/2200-2299/2294.Partition Array Such That Maximum Difference Is K/README_EN.md

-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ func partitionArray(nums []int, k int) int {
146146

147147
```ts
148148
function partitionArray(nums: number[], k: number): number {
149-
if (!nums.length) return 0;
150149
nums.sort((a, b) => a - b);
151150
let ans = 1;
152151
let prev = nums[0] + k;

solution/2200-2299/2294.Partition Array Such That Maximum Difference Is K/Solution.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
function partitionArray(nums: number[], k: number): number {
2-
if (!nums.length) return 0;
32
nums.sort((a, b) => a - b);
43
let ans = 1;
54
let prev = nums[0] + k;

0 commit comments

Comments
 (0)