텐 센트 면접 문제 (9 도) - 면적 이 가장 큰 전체 1 자 행렬
3348 단어 알고리즘
제목 설명:
M * N 의 행렬 에서 모든 요 소 는 0 과 1 에 불과 하 다. 이 행렬 에서 면적 이 가장 큰 전 1 자 행렬 을 찾 아 냈 다. 최대 라 는 것 은 요소 1 의 개수 가 가장 많다 는 것 을 말한다.
입력:
입력 은 여러 개의 테스트 샘플 을 포함 할 수 있 습 니 다.모든 테스트 사례 에 대해 입력 한 첫 번 째 줄 은 두 개의 정수 m, n (1 < = m, n < = 1000) 이다. 입력 할 행렬 의 크기 를 나타 낸다.행렬 은 모두 m 줄 이 있 고 줄 마다 n 개의 정수 가 있 으 며 각각 0 또는 1 이 며 인접 한 두 수 사이 에 빈 칸 으로 엄 격 히 분리 된다.
출력:
모든 테스트 사례 에 대응 하여 출력 행렬 에서 면적 이 가장 큰 전체 1 자 행렬 의 요소 갯 수 입 니 다.
샘플 입력:
2 2
0 0
0 0
4 4
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0
샘플 출력:
0
4
해결 방법:
1. 동적 계획 - 세 개의 상태 배열 로 현재 점 의 높이 up, 왼쪽 경계 left, 오른쪽 경계 right, max 를 각각 저장 합 니 다.value=max(max_value,up*(right-left+1);
#include
using namespace std;
#include
#define N 1000
bool data[N][N];
int up[N][N];
int l_flag[N][N];
int r_flag[N][N];
int main()
{
int m,n;
int max_1;
int l_num,r_num;
while(cin>>m>>n)
{
for(int i=0;i>data[i][j];
max_1=0;
for(int i=0;i=0;j--)
{
if(!data[i][j])
{
r_flag[i][j]=n;
r_num=j;
}
else
{
if(i==0)
r_flag[i][j]=r_num-1;
else
r_flag[i][j]=min(r_num-1,r_flag[i-1][j]);
}
max_1=max(max_1,up[i][j]*(r_flag[i][j]-l_flag[i][j]+1));
}
}
cout<
2. 각 점 의 왼쪽 연속 1 개 수 를 오른쪽으로 가 져 옵 니 다. 예 를 들 어 0, 1, 1, 10 - > 0, 1, 2, 0. 그리고 각 열의 최대 1 행렬 을 계산 합 니 다. 예 를 들 어:
모 열 은 1, 2, 3, 4, 20 이 고 최대 1 행렬 은 2 * 5 = 10 이 며 구체 적 인 방법 은 각 요소 에 대해 각각 위 (왼쪽) 아래로 (오른쪽) 조회 연속 이 자신의 요소 개수 보다 큰 다음 에 곱 하 는 것 이다.
이 방법 은 9 도 에서 시간 을 초과 하 였 으 나 결 과 는 옳 았 다.
#include
using namespace std;
#include
bool data[1000][1000];
int flag[1000][1000];
int main()
{
int m,n;
int max_1,value,depth;
int x;
while(cin>>m>>n)
{
for(int i=0;i>data[i][j];
if(data[i][j])
{
if(j==0)
flag[i][j]=1;
else
flag[i][j]=flag[i][j-1]+1;
}
else
flag[i][j]=0;
}
max_1=0;
for(int j=0;j0)
{
if(flag[--x][j]>=value)
depth+=1;
else
break;
}
x=i;
while(x=value)
depth+=1;
else
break;
}
max_1=max(max_1,depth*value);
}
}
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
물체 검출의 평가 지표 IoU의 계산 방법Yolo나 SSD 등 물체 검출에서 평가 지표로 사용되는 IoU에 대해 조사했으므로 정리했습니다. IoU (Intersection over Union)는 두 영역이 얼마나 겹치는지를 나타내는 지표입니다. 두 영역의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.