74. Search a 2D Matrix
leetcode medium
#array#csharp#leetcode#matrix#medium#search#sort#string#two-pointers
Task
Вам дана матрица из целых чисел размером m на n с следующими двумя свойствами:
Каждая строка отсортирована в порядке неубывания.
Первое число каждой строки больше последнего числа предыдущей строки.
Дано целое число target. Верните true, если target присутствует в матрице, и false в противном случае.
C# solution
matched/originalpublic class Solution {
public bool SearchMatrix(int[][] matrix, int target) {
int m = matrix.Length;
if (m == 0)
return false;
int n = matrix[0].Length;
int left = 0, right = m * n - 1;
int pivotIdx, pivotElement;
while (left <= right) {
pivotIdx = (left + right) / 2;
pivotElement = matrix[pivotIdx / n][pivotIdx % n];
if (target == pivotElement)
return true;
else {
if (target < pivotElement)
right = pivotIdx - 1;
else
left = pivotIdx + 1;
}
}
return false;
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool SearchMatrix(int[][] matrix, int target) {
int m = matrix.size();
if (m == 0)
return false;
int n = matrix[0].size();
int left = 0, right = m * n - 1;
int pivotIdx, pivotElement;
while (left <= right) {
pivotIdx = (left + right) / 2;
pivotElement = matrix[pivotIdx / n][pivotIdx % n];
if (target == pivotElement)
return true;
else {
if (target < pivotElement)
right = pivotIdx - 1;
else
left = pivotIdx + 1;
}
}
return false;
}
}Java solution
matched/originalclass Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
if (m == 0) return false;
int n = matrix[0].length;
int left = 0, right = m * n - 1;
int pivotIdx, pivotElement;
while (left <= right) {
pivotIdx = (left + right) / 2;
pivotElement = matrix[pivotIdx / n][pivotIdx % n];
if (target == pivotElement) return true;
else {
if (target < pivotElement) right = pivotIdx - 1;
else left = pivotIdx + 1;
}
}
return false;
}
}JavaScript solution
matched/originalvar searchMatrix = function (matrix, target) {
let m = matrix.length;
if (m == 0) return false;
let n = matrix[0].length;
let left = 0,
right = m * n - 1;
let pivotIdx, pivotElement;
while (left <= right) {
pivotIdx = Math.floor((left + right) / 2);
pivotElement = matrix[Math.floor(pivotIdx / n)][pivotIdx % n];
if (target == pivotElement) return true;
else {
if (target < pivotElement) right = pivotIdx - 1;
else left = pivotIdx + 1;
}
}
return false;
};Python solution
matched/originalclass Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
m = len(matrix)
if m == 0:
return False
n = len(matrix[0])
left, right = 0, m * n - 1
while left <= right:
pivot_idx = (left + right) // 2
pivot_element = matrix[pivot_idx // n][pivot_idx % n]
if target == pivot_element:
return True
else:
if target < pivot_element:
right = pivot_idx - 1
else:
left = pivot_idx + 1
return FalseGo solution
matched/originalfunc searchMatrix(matrix [][]int, target int) bool {
m := len(matrix)
if m == 0 {
return false
}
n := len(matrix[0])
left, right := 0, m*n-1
var pivotIdx, pivotElement int
for left <= right {
pivotIdx = (left + right) / 2
pivotElement = matrix[pivotIdx/n][pivotIdx%n]
if target == pivotElement {
return true
} else {
if target < pivotElement {
right = pivotIdx - 1
} else {
left = pivotIdx + 1
}
}
}
return false
}