Skip to content

Commit 914c31c

Browse files
committed
feat: update leetcode solutions: No.0074. Search a 2D Matrix
1 parent b6355c0 commit 914c31c

File tree

7 files changed

+127
-51
lines changed

7 files changed

+127
-51
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
### 数组
5151

5252
- [删除排序数组中的重复项](/solution/0000-0099/0026.Remove%20Duplicates%20from%20Sorted%20Array/README.md)
53+
- [删除排序数组中的重复项 II](/solution/0000-0099/0080.Remove%20Duplicates%20from%20Sorted%20Array%20II/README.md)
5354
- [移除元素](/solution/0000-0099/0027.Remove%20Element/README.md)
5455
- [移动零](/solution/0200-0299/0283.Move%20Zeroes/README.md)
5556
- [数组中重复的数字](/lcof/面试题03.%20数组中重复的数字/README.md)

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
5050
### Arrays
5151

5252
- [Remove Duplicates from Sorted Array](/solution/0000-0099/0026.Remove%20Duplicates%20from%20Sorted%20Array/README_EN.md)
53+
- [Remove Duplicates from Sorted Array II](/solution/0000-0099/0080.Remove%20Duplicates%20from%20Sorted%20Array%20II/README_EN.md)
5354
- [Remove Element](/solution/0000-0099/0027.Remove%20Element/README_EN.md)
5455
- [Move Zeroes](/solution/0200-0299/0283.Move%20Zeroes/README_EN.md)
5556
- [Rotate Array](/solution/0100-0199/0189.Rotate%20Array/README_EN.md)

solution/0000-0099/0074.Search a 2D Matrix/README.md

+49-1
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,70 @@ target = 13
3939

4040
<!-- 这里可写通用的实现逻辑 -->
4141

42+
将二维矩阵逻辑展开,然后二分查找即可。
43+
4244
<!-- tabs:start -->
4345

4446
### **Python3**
4547

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

4850
```python
49-
51+
class Solution:
52+
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
53+
m, n = len(matrix), len(matrix[0])
54+
l, h = 0, m * n - 1
55+
while l <= h:
56+
mid = l + ((h - l) >> 1)
57+
x, y = divmod(mid, n)
58+
if matrix[x][y] == target:
59+
return True
60+
if matrix[x][y] < target:
61+
l = mid + 1
62+
else:
63+
h = mid - 1
64+
return False
5065
```
5166

5267
### **Java**
5368

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

5671
```java
72+
class Solution {
73+
public boolean searchMatrix(int[][] matrix, int target) {
74+
int m = matrix.length, n = matrix[0].length;
75+
int l = 0, h = m * n - 1;
76+
while (l <= h) {
77+
int mid = l + ((h - l) >> 1);
78+
int x = mid / n, y = mid % n;
79+
if (matrix[x][y] == target) return true;
80+
if (matrix[x][y] < target) l = mid + 1;
81+
else h = mid - 1;
82+
}
83+
return false;
84+
}
85+
}
86+
```
5787

88+
### **C++**
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
bool searchMatrix(vector<vector<int>>& matrix, int target) {
94+
int m = matrix.size(), n = matrix[0].size();
95+
int l = 0, h = m * n - 1;
96+
while (l <= h) {
97+
int mid = l + ((h - l) >> 1);
98+
int x = mid / n, y = mid % n;
99+
if (matrix[x][y] == target) return true;
100+
if (matrix[x][y] < target) l = mid + 1;
101+
else h = mid - 1;
102+
}
103+
return false;
104+
}
105+
};
58106
```
59107
60108
### **...**

solution/0000-0099/0074.Search a 2D Matrix/README_EN.md

+47-1
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,59 @@ target = 13
6060
### **Python3**
6161

6262
```python
63-
63+
class Solution:
64+
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
65+
m, n = len(matrix), len(matrix[0])
66+
l, h = 0, m * n - 1
67+
while l <= h:
68+
mid = l + ((h - l) >> 1)
69+
x, y = divmod(mid, n)
70+
if matrix[x][y] == target:
71+
return True
72+
if matrix[x][y] < target:
73+
l = mid + 1
74+
else:
75+
h = mid - 1
76+
return False
6477
```
6578

6679
### **Java**
6780

6881
```java
82+
class Solution {
83+
public boolean searchMatrix(int[][] matrix, int target) {
84+
int m = matrix.length, n = matrix[0].length;
85+
int l = 0, h = m * n - 1;
86+
while (l <= h) {
87+
int mid = l + ((h - l) >> 1);
88+
int x = mid / n, y = mid % n;
89+
if (matrix[x][y] == target) return true;
90+
if (matrix[x][y] < target) l = mid + 1;
91+
else h = mid - 1;
92+
}
93+
return false;
94+
}
95+
}
96+
```
6997

98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
bool searchMatrix(vector<vector<int>>& matrix, int target) {
104+
int m = matrix.size(), n = matrix[0].size();
105+
int l = 0, h = m * n - 1;
106+
while (l <= h) {
107+
int mid = l + ((h - l) >> 1);
108+
int x = mid / n, y = mid % n;
109+
if (matrix[x][y] == target) return true;
110+
if (matrix[x][y] < target) l = mid + 1;
111+
else h = mid - 1;
112+
}
113+
return false;
114+
}
115+
};
70116
```
71117
72118
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
class Solution {
22
public:
33
bool searchMatrix(vector<vector<int>>& matrix, int target) {
4-
if(matrix.empty())return false;
5-
6-
size_t row = matrix.size();
7-
size_t column = matrix[0].size();
8-
if(column == 0 || column == 0)return false;
9-
10-
if(target < matrix[0][0] || target > matrix[row-1][column-1])return false;
11-
12-
for(int i = 0;i<row;i++){
13-
if(matrix[i][column-1]<target)continue;
14-
15-
auto iter = find(matrix[i].begin(),matrix[i].end(),target);
16-
if(iter != matrix[i].end())return true;
17-
else return false;
4+
int m = matrix.size(), n = matrix[0].size();
5+
int l = 0, h = m * n - 1;
6+
while (l <= h) {
7+
int mid = l + ((h - l) >> 1);
8+
int x = mid / n, y = mid % n;
9+
if (matrix[x][y] == target) return true;
10+
if (matrix[x][y] < target) l = mid + 1;
11+
else h = mid - 1;
1812
}
19-
2013
return false;
21-
}
14+
}
2215
};

solution/0000-0099/0074.Search a 2D Matrix/Solution.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
class Solution {
22
public boolean searchMatrix(int[][] matrix, int target) {
3-
int x = 0,y = matrix.length-1;
4-
if(y<0) return false;
5-
int maxX = matrix[0].length-1;
6-
while ((x <= maxX) && (y >= 0)) {
7-
int cur = matrix[y][x];
8-
if (cur == target) return false;
9-
if (cur < target) x++;
10-
else y--;
3+
int m = matrix.length, n = matrix[0].length;
4+
int l = 0, h = m * n - 1;
5+
while (l <= h) {
6+
int mid = l + ((h - l) >> 1);
7+
int x = mid / n, y = mid % n;
8+
if (matrix[x][y] == target) return true;
9+
if (matrix[x][y] < target) l = mid + 1;
10+
else h = mid - 1;
1111
}
1212
return false;
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
11
class Solution:
2-
def searchMatrix(self, matrix, target):
3-
"""
4-
:type matrix: List[List[int]]
5-
:type target: int
6-
:rtype: bool
7-
"""
8-
9-
if not matrix or not matrix[0]:
10-
return False
11-
12-
for row in matrix:
13-
if row[0] <= target <= row[-1]:
14-
s = 0
15-
e = len(row)-1
16-
while s <= e:
17-
mid = (s+e)//2
18-
if row[mid] == target:
19-
return True
20-
elif row[mid] > target:
21-
e = mid-1
22-
else:
23-
s = mid+1
24-
25-
return False
26-
2+
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
3+
m, n = len(matrix), len(matrix[0])
4+
l, h = 0, m * n - 1
5+
while l <= h:
6+
mid = l + ((h - l) >> 1)
7+
x, y = divmod(mid, n)
8+
if matrix[x][y] == target:
9+
return True
10+
if matrix[x][y] < target:
11+
l = mid + 1
12+
else:
13+
h = mid - 1
2714
return False

0 commit comments

Comments
 (0)