2 차원 매트릭스 검색 II (LeetCode 240 번) 자바 구현
2695 단어 LeetCode 문제 풀이
효율 적 인 알고리즘 을 만들어 서 검색 하 다. m x n 매트릭스 매트릭스 의 목표 값 target 입 니 다.이 행렬 은 다음 과 같은 특성 을 가지 고 있다.
각 줄 의 요 소 는 왼쪽 에서 오른쪽으로 오름차 순 으로 배열 되 어 있다.각 열의 요 소 는 위 에서 아래로 오름차 순 으로 배열 된다.예시:
현재 매트릭스 매트릭스 행렬 은 다음 과 같 습 니 다.
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] 주어진 대상 = 5, 귀환 true。
정 하 다 target = 돌아오다 false。
2. 문제 풀이 사고
방법 1: 왼쪽 아래 의 수 matrix [x] [y] 부터 비교 합 니 다. target > matrix [x] [y] 때 는 맨 왼쪽 첫 번 째 열 을 버린다.하면, 만약, 만약...
방법 2: 이분법 을 사용 하여 맨 오른쪽 열 부터 먼저 2 분 에 target 을 찾 아 몇 번 째 줄 을 찾 습 니 다.다시 이분법 으로 이 줄 의 몇 번 째 수 를 찾 아 라.target 의 존재 여 부 를 판단 합 니 다.시간 복잡 도 는 O (logn + logm) 이 고 공간 복잡 도 는 O (1) 이다.
3. 자바 코드 실행 가능
방법 1:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0){
return false;
}
int x = matrix.length-1;
int y = 0;
while(x>=0 && y target){
x--;
}else if(matrix[x][y] < target){
y++;
}else{
return true;
}
}
return false;
}
}
방법 2:
class Solution {
private boolean find(int[] matrixRow, int target) {
int left = 0, right = matrixRow.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (matrixRow[mid] == target) {
return true;
} else if (matrixRow[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return matrixRow[left] == target;
}
public boolean searchMatrix(int[][] matrix, int target) {
int rows = matrix.length;
if (rows == 0) return false;
int cols = matrix[0].length;
if (cols == 0) return false;
int topRow = 0, bottomRow = rows - 1;
while (topRow < bottomRow) {
int mid = (topRow + bottomRow) / 2;
if (matrix[mid][cols - 1] < target) {
topRow = mid + 1;
} else {
bottomRow = mid;
}
}
int rowToScan = topRow;
boolean found = false;
while (rowToScan < rows && matrix[rowToScan][0] <= target) {
if (find(matrix[rowToScan], target)) {
return true;
} else {
++ rowToScan;
}
}
return false;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LRU 캐 시 메커니즘 (LeetCode 146 번) 자바 구현LRU (최근 최소 사용) 캐 시 메커니즘.다음 동작 을 지원 해 야 합 니 다: 데이터 가 져 오기 get 기록 데이터 put 。 데이터 가 져 오기 get(key) - 키 (key) 가 캐 시 에 존재...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.