LeetCode 1483 트 리 노드 의 K 번 째 조상 인 구조 캐 시, 조회 최적화 O (logN)
LeetCode 1483 나무 노드 의 K 번 째 조상
나무 한 그루 를 드 리 겠 습 니 다. 나무 에 n 개의 노드 가 있 습 니 다. 0 에서 n - 1 번 호 를 누 르 십시오.나 무 는 부모 노드 배열 의 형식 으로 제 시 됩 니 다. 그 중에서 parent [i] 는 노드 i 의 부모 노드 입 니 다.나무의 뿌리 노드 는 번호 가 0 인 노드 이다.
getKthAncestor (int node, int k) 함 수 를 설계 하고 실현 하 십시오. 함 수 는 노드 node 의 k 번 째 조상 노드 를 되 돌려 줍 니 다.이러한 조상 노드 가 존재 하지 않 는 다 면 - 1 로 돌아 갑 니 다.
나무 노드 의 k 번 째 조상 노드 는 이 노드 에서 뿌리 노드 까지 의 k 번 째 노드 이다.알림:
각 노드 의 첫 번 째 조상, 10 번 째 조상, 100 번 째 조상, 1000 번 째 조상 과 10000 번 째 조상 을 기록 합 니 다. 데이터 규모 가 10 ^ 4 이기 때문에 이 10000 까지 유지 하면 됩 니 다. 이 캐 시 시트 로 찾 아 보 세 요. 찾 는 시간 복잡 도 는 O (logN) 입 니 다.캐 시 구성 시간 복잡 도 O (N)
코드
class TreeAncestor {
private int[][] anc;
public TreeAncestor(int n, int[] parent) {
anc = new int[n][5];
for(int i = 0; i < n; i++) {
Arrays.fill(anc[i], -1);
anc[i][0] = parent[i];
}
for(int i = 1; i < 5; i++) {
for(int j = 0; j < n; j++) {
int cur = anc[j][i-1];
for(int k = 0; k < 9; k++) if(cur != -1) {
cur = anc[cur][i-1];
}
anc[j][i] = cur;
}
}
}
public int getKthAncestor(int node, int k) {
for(int i = 4; i >= 0; i--) {
int base = 1;
for(int j = 0; j < i; j++) {
base *= 10;
}
while(k >= base) {
node = anc[node][i];
k -= base;
if(node == -1) {
return -1;
}
}
}
return node;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.