악센트 74 OJ 51: 검색 2 차원 매트릭스 2 점 찾기

10294 단어 LeetCode
질문 설명:
m x n 매트릭스 에 목표 값 이 존재 하 는 지 여 부 를 판단 하기 위해 효율 적 인 알고리즘 을 만 듭 니 다.2 점 찾기 를 요구 합 니 다.
이 행렬 은 다음 과 같은 특성 을 가지 고 있다.
각 줄 의 정 수 는 왼쪽 에서 오른쪽으로 오름차 순 으로 배열 된다.
각 줄 의 첫 번 째 정 수 는 이전 줄 의 마지막 정수 보다 크다.
예시 1:
입력:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
출력: true
예시 2:
입력:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
출력: false
사고: 2 차원 매트릭스 논 리 를 배열 로 바 꾸 고 idm, idn 으로 행렬 의 줄 과 열 을 기록 합 니 다.
#include
#include
#include
#include
#include
#include
#include
using namespace std;

class Solution{
     
public:
    bool searchMatrix(vector<vector<int> > matrix,int target){
     
        int m,n,id,left,right;
        n=matrix[0].size();
        m=matrix.size();
        if(m==0) return false;
        right=m*n-1;
        left=0;

        while(left<=right){
     
            id=(right+left)/2;
            int idm=id/n;
            int idn=id%n;
            if(matrix[idm][idn]==target)
                return true;
            else{
     
                if(target<matrix[idm][idn])
                    right=id-1;
                else
                    left=id+1;
            }
        }
        return false;
    }
};
int main()
{
     
    vector<vector<int> > matrix;
    int target;
    int m,n,e;
    cin>>m>>n;
    for(int i=0; i<m; i++)
    {
     
        vector<int> aRow;
        for(int j=0; j<n; j++)
        {
     
            cin>>e;
            aRow.push_back(e);
        }
        matrix.push_back(aRow);
    }
    cin>>target;
    bool res=Solution().searchMatrix(matrix,target);
    cout<<(res?"true":"false")<<endl;
    return 0;
}


좋은 웹페이지 즐겨찾기