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 4b08e83

Browse files
committed
feat: add solutions to lc problem: No.1855. Maximum Distance Between a Pair of Values
1 parent 62b4221 commit 4b08e83

File tree

5 files changed

+162
-4
lines changed

5 files changed

+162
-4
lines changed

‎solution/1800-1899/1855.Maximum Distance Between a Pair of Values/README.md‎

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,27 +61,83 @@
6161
<li><code>nums1</code> 和 <code>nums2</code> 都是 <strong>非递增</strong> 数组</li>
6262
</ul>
6363

64-
6564
## 解法
6665

6766
<!-- 这里可写通用的实现逻辑 -->
6867

68+
二分法。
69+
70+
遍历数组 A,对于每个数字 `A[i]`,用二分法找到数组 B 中下标最大并且比 `A[i]` 还大的数字即可。
71+
6972
<!-- tabs:start -->
7073

7174
### **Python3**
7275

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

7578
```python
76-
79+
class Solution:
80+
def maxDistance(self, nums1: List[int], nums2: List[int]) -> int:
81+
res = 0
82+
for i in range(len(nums1)):
83+
l, r = i, len(nums2) - 1
84+
while l <= r:
85+
mid = (l + r) >> 1
86+
if nums2[mid] >= nums1[i]:
87+
res = max(res, mid - i)
88+
l = mid + 1
89+
else:
90+
r = mid - 1
91+
return res
7792
```
7893

7994
### **Java**
8095

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

8398
```java
99+
class Solution {
100+
public int maxDistance(int[] nums1, int[] nums2) {
101+
int res = 0;
102+
for (int i = 0; i < nums1.length; ++i) {
103+
int l = i, r = nums2.length - 1;
104+
while (l <= r) {
105+
int mid = (l + r) >>> 1;
106+
if (nums2[mid] >= nums1[i]) {
107+
res = Math.max(res, mid - i);
108+
l = mid + 1;
109+
} else {
110+
r = mid - 1;
111+
}
112+
}
113+
}
114+
return res;
115+
}
116+
}
117+
```
84118

119+
### **C++**
120+
121+
```cpp
122+
class Solution {
123+
public:
124+
int maxDistance(vector<int>& nums1, vector<int>& nums2) {
125+
int res = 0;
126+
for (int i = 0; i < nums1.size(); ++i) {
127+
int l = i, r = nums2.size() - 1;
128+
while (l <= r) {
129+
int mid = (l + r) >> 1;
130+
if (nums2[mid] >= nums1[i]) {
131+
res = max(res, mid - i);
132+
l = mid + 1;
133+
} else {
134+
r = mid - 1;
135+
}
136+
}
137+
}
138+
return res;
139+
}
140+
};
85141
```
86142
87143
### **...**

‎solution/1800-1899/1855.Maximum Distance Between a Pair of Values/README_EN.md‎

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,73 @@ The maximum distance is 2 with pair (2,4).
5858
<li>Both <code>nums1</code> and <code>nums2</code> are <strong>non-increasing</strong>.</li>
5959
</ul>
6060

61-
6261
## Solutions
6362

6463
<!-- tabs:start -->
6564

6665
### **Python3**
6766

6867
```python
69-
68+
class Solution:
69+
def maxDistance(self, nums1: List[int], nums2: List[int]) -> int:
70+
res = 0
71+
for i in range(len(nums1)):
72+
l, r = i, len(nums2) - 1
73+
while l <= r:
74+
mid = (l + r) >> 1
75+
if nums2[mid] >= nums1[i]:
76+
res = max(res, mid - i)
77+
l = mid + 1
78+
else:
79+
r = mid - 1
80+
return res
7081
```
7182

7283
### **Java**
7384

7485
```java
86+
class Solution {
87+
public int maxDistance(int[] nums1, int[] nums2) {
88+
int res = 0;
89+
for (int i = 0; i < nums1.length; ++i) {
90+
int l = i, r = nums2.length - 1;
91+
while (l <= r) {
92+
int mid = (l + r) >>> 1;
93+
if (nums2[mid] >= nums1[i]) {
94+
res = Math.max(res, mid - i);
95+
l = mid + 1;
96+
} else {
97+
r = mid - 1;
98+
}
99+
}
100+
}
101+
return res;
102+
}
103+
}
104+
```
75105

106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
int maxDistance(vector<int>& nums1, vector<int>& nums2) {
112+
int res = 0;
113+
for (int i = 0; i < nums1.size(); ++i) {
114+
int l = i, r = nums2.size() - 1;
115+
while (l <= r) {
116+
int mid = (l + r) >> 1;
117+
if (nums2[mid] >= nums1[i]) {
118+
res = max(res, mid - i);
119+
l = mid + 1;
120+
} else {
121+
r = mid - 1;
122+
}
123+
}
124+
}
125+
return res;
126+
}
127+
};
76128
```
77129
78130
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
int maxDistance(vector<int>& nums1, vector<int>& nums2) {
4+
int res = 0;
5+
for (int i = 0; i < nums1.size(); ++i) {
6+
int l = i, r = nums2.size() - 1;
7+
while (l <= r) {
8+
int mid = (l + r) >> 1;
9+
if (nums2[mid] >= nums1[i]) {
10+
res = max(res, mid - i);
11+
l = mid + 1;
12+
} else {
13+
r = mid - 1;
14+
}
15+
}
16+
}
17+
return res;
18+
}
19+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int maxDistance(int[] nums1, int[] nums2) {
3+
int res = 0;
4+
for (int i = 0; i < nums1.length; ++i) {
5+
int l = i, r = nums2.length - 1;
6+
while (l <= r) {
7+
int mid = (l + r) >>> 1;
8+
if (nums2[mid] >= nums1[i]) {
9+
res = Math.max(res, mid - i);
10+
l = mid + 1;
11+
} else {
12+
r = mid - 1;
13+
}
14+
}
15+
}
16+
return res;
17+
}
18+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def maxDistance(self, nums1: List[int], nums2: List[int]) -> int:
3+
res = 0
4+
for i in range(len(nums1)):
5+
l, r = i, len(nums2) - 1
6+
while l <= r:
7+
mid = (l + r) >> 1
8+
if nums2[mid] >= nums1[i]:
9+
res = max(res, mid - i)
10+
l = mid + 1
11+
else:
12+
r = mid - 1
13+
return res

0 commit comments

Comments
(0)

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