[한번 지나] Lintcode 38. 2 차원 매트릭스 검색 II
이 행렬 은 다음 과 같은 특성 을 가지 고 있다.
4. 567917. 각 줄 의 정 수 는 왼쪽 에서 오른쪽으로 정렬 된다
4. 567917. 각 열의 정 수 는 위 에서 아래로 정렬 된다
4. 567917. 각 줄 이나 각 열 에 중복 되 는 정수 가 없다
본보기
다음 행렬 을 고려 합 니 다:
[
[1, 3, 5, 7],
[2, 4, 7, 8],
[3, 5, 9, 10]
]
target 제시 = 3, 귀환 2
도전 하 다.
O (m + n) 시간 복잡 도와 O (1) 추가 공간 요구
문제 풀이 사고 1:
우선 줄 마다 2 점 씩 찾 는 게 생각 났 어 요.시간 복잡 도 는 O (nlogn) 로 문제 의 모든 열 을 이용 하지 못 한 것 도 순 서 를 잘 정 하 는 조건 이 므 로 가장 좋 은 것 이 아니다.
class Solution {
public:
/**
* @param matrix: A list of lists of integers
* @param target: An integer you want to search in matrix
* @return: An integer indicate the total occurrence of target in the given matrix
*/
int searchMatrix(vector> &matrix, int target)
{
// write your code here
int resNum = 0;
for(int i=0 ; i< matrix.size() ; i++)
if(binarySearch(matrix[i] , target) != -1)
resNum++;
return resNum;
}
int binarySearch(vector & vec , int target)
{
int l = 0;
int r = vec.size()-1;
return binarySearch(vec , l , r , target);
}
int binarySearch(vector & vec , int l , int r , int target)
{
if(l > r)
return -1;
int mid = (l+r) / 2;
if(vec[mid] == target)
return mid;
else if(vec[mid] < target)
return binarySearch(vec , mid+1 , r , target);
else
return binarySearch(vec , l , mid-1 , target);
}
};
문제 풀이 사고 2:
만약 우리 가 문제 에서 준 그 예 를 관찰한다 면, 우 리 는 두 위치의 숫자 가 매우 특징 이 있 고, 왼쪽 아래 와 오른쪽 상단 의 수 를 발견 할 수 있다.예 를 들 어 오른쪽 상단 의 7 은 왼쪽 의 모든 수가 작 아 지고 아래 의 모든 수가 증가 하면 우 리 는 목표 수 와 비교 할 수 있다. 목표 수가 크 면 아래 를 찾 고 목표 수가 작 으 면 왼쪽 을 찾 을 수 있다.이렇게 하면 목표 수의 존재 여 부 를 판단 할 수 있다.코드 는 다음 과 같 습 니 다:
public class Solution {
/**
* @param matrix: A list of lists of integers
* @param target: An integer you want to search in matrix
* @return: An integer indicate the total occurrence of target in the given matrix
*/
public int searchMatrix(int[][] matrix, int target) {
// write your code here
int row = matrix.length;
int col = matrix[0].length;
int res = 0;
//
int i = row-1, j = 0;
while(i >= 0 && j < col){
if(matrix[i][j] == target){
res++;
i--;
}else if(matrix[i][j] > target)
i--;
else
j++;
}
return res;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
453 - 두 갈래 나무를 체인 시계로 분해어제 반나절 동안 연락한 두 갈래 나무의 기본 조작에도 불구하고 오늘 제목을 짓는 것은 여전히 순조롭지 않다. 이리저리 돌아다니면서 좌우 나무를 고치려고 했지만 현실적이지 않은 것 같다. 어쩔 수 없이 먼저 훑어보는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.