프로그래머 면접 문제 정선 100 문제: 6 - 10 문제 풀이 보고서
5484 단어 면접 문제검지 offer 100 문제
제목: 정수 배열 을 입력 하여 이 배열 이 특정한 이원 에서 트 리 의 뒤 순 서 를 찾 아 옮 겨 다 니 는 결과 인지 판단 합 니 다.true 로 돌아 가 는 것 이 라면, 그렇지 않 으 면 false 로 돌아 갑 니 다.
예 를 들 어 5, 7, 6, 9, 11, 10, 8 을 입력 하 십시오. 이 정수 서열 은 다음 과 같은 나무의 순서 로 결 과 를 옮 겨 다 니 기 때 문 입 니 다.
8 / \ 6 10 / \ / \ 5 7 9 11
그래서 트 루 로 돌아간다.
7, 4, 6, 5 를 입력 하면 나무의 뒷 순 서 를 옮 겨 다 니 는 결과 가 이 순서 가 없 기 때문에 false 로 돌아 갑 니 다.
분석: 귀속 문제
#include <iostream>
using namespace std;
bool check(int arry[],int beg,int end)
{
if(beg > end || arry==NULL)
{
return false;
}
if(beg == end)
return true;
int change = end;
while(true)
{
if(change>=beg && arry[change] >= arry[end])
{
change--;
}
else
break;
}
/*int change = end-1;
for(;change>=0;--change)
{
if(arry[change]<arry[end])
break;
}*/
int left = change;
while(left>=beg && arry[left]<arry[end])
{
left--;
}
if(left>=beg)
return false;
//recurs
return check(arry,beg,change) && check(arry,change+1,end-1);
}
int main()
{
//int arry[] = {5,7,6,9,11,10,8};
int arry[] = {7,4,6,5};
bool ispostorder = check(arry,0,sizeof(arry)/sizeof(int)-1);
if(ispostorder)
cout << "yes postorder..." << endl;
else
cout << "not postorder..." << endl;
return 0;
}
답:
bool verifySquenceOfBST(int squence[], int length)
{
if(squence == NULL || length <= 0)
return false;
// root of a BST is at the end of post order traversal squence
int root = squence[length - 1];
// the nodes in left sub-tree are less than the root
int i = 0;
for(; i < length - 1; ++ i)
{
if(squence[i] > root)
break;
}
// the nodes in the right sub-tree are greater than the root
int j = i;
for(; j < length - 1; ++ j)
{
if(squence[j] < root)
return false;
}
// verify whether the left sub-tree is a BST
bool left = true;
if(i > 0)
left = verifySquenceOfBST(squence, i);
// verify whether the right sub-tree is a BST
bool right = true;
if(i < length - 1)
right = verifySquenceOfBST(squence + i, length - i - 1);
return (left && right);
}
왼쪽 에서 오른쪽으로, 여기 for 가 while 보다 좋 은 것 같 아 요. oj 에 AC 가 없어 서 그런 상황 을 고려 하지 않 았 어 요??
=====================================================
프로그래머 면접 문제 정선 100 문제 (07) - 문장 속 단 어 를 뒤 집 는 순서 [알고리즘]
제목: 영어 문장 을 입력 하고 문장의 단어의 순 서 를 뒤 집 지만 단어 내 문자 의 순 서 는 변 하지 않 습 니 다.문장 중의 단 어 는 빈 칸 으로 구분 된다.간단 한 견 해 를 위해 문장 부 호 는 일반 자모 와 같이 처리한다.
예 를 들 어 'I am astudent.' 를 입력 하면 'student. a am I' 를 출력 합 니 다.
이 문 제 는 문장 을 뒤 집어 야 하기 때문에, 우 리 는 먼저 문장의 모든 문 자 를 뒤 집어 야 한다.이때 문장 속 단어의 순 서 를 뒤 집 었 을 뿐만 아니 라 단어 내 문자 도 뒤 집 혔 다.우 리 는 모든 단어 안의 문 자 를 다시 뒤 집 었 다.단어 안의 문자 가 두 번 뒤 집 히 기 때문에 순 서 는 입력 시의 순서 와 일치 합 니 다.
단어 순 서 를 먼저 뒤 집 은 다음 에 전부 뒤 집 을 수도 있다.
질문
========================================================
프로그래머 면접 문제 정선 100 문제 (08) - 구 1 + 2 +... + n [C / C + + / C \ #]
제목: 1 + 2 +... + n 을 구하 고 곱셈 법, for, while, if, else, switch, case 등 키워드 와 조건 판단 문 (A? B: C) 을 사용 할 수 없습니다.
이것 은 확실히 발산 할 수 있 습 니 다. 클래스 를 정의 합 니 다. 우리 new 는 n 개의 이러한 유형의 요 소 를 포함 한 배열 입 니 다. 그러면 이러한 구조 함 수 는 n 회 호출 될 것 입 니 다.
============================================================
프로그래머 면접 문제 정선 100 문제 (09) - 링크 에서 꼴찌 k 번 째 결점 [데이터 구조]
제목: 단 방향 링크 를 입력 하여 이 링크 의 마지막 k 번 째 노드 를 출력 합 니 다.링크 의 마지막 0 번 째 노드 는 링크 의 꼬리 지침 이다.
분석: 빠 르 고 느 린 지침.
확장: 단 방향 링크 를 입력 하 십시오.만약 이 링크 의 결산 포인트 가 홀수 라면 중간 결산 점 을 출력 합 니 다.링크 의 노드 가 짝수 라면 중간 두 개의 노드 앞 에 있 는 하 나 를 출력 합 니 다.
==================================================================
프로그래머 면접 문제 정선 100 문제 (10) - 정렬 배열 과 주어진 값 의 두 숫자 [알고리즘]
제목: 오름차 순 으로 정렬 된 배열 과 숫자 를 입력 하고 배열 에서 두 개의 수 를 찾 아 입력 한 숫자 와 맞 게 합 니 다.요구 시간 복잡 도 는 O (n) 이다.만약 여러 쌍 의 숫자 와 입력 한 숫자 가 있다 면, 임의의 한 쌍 을 출력 하면 된다.
예 를 들 어 배열 1, 2, 4, 7, 11, 15 와 숫자 15 를 입력 하 십시오.4 + 11 = 15 이기 때문에 4 와 11 을 출력 합 니 다.
분석: 1. 폭력 C (2, n) 복잡 도 O (n ^ 2)
2. 이것 은 질서 있 는 이 조건 을 이용 하지 않 고 두 개의 지침 을 중간 으로 최적화 시 켰 다.복잡 도 O (n)
확장:
1. 하나의 배열 을 입력 하여 이 배열 에 세 개의 숫자 i, j, k 가 존재 하 는 지 판단 하고 i + j + k 를 만족 시 키 는 것 은 0 과 같다.
먼저 O (nlogn) 를 정렬 한 다음 에 각 요소 에 대해 상기 알고리즘 을 사용 하여 두 개의 수 와 이 값 이 있 는 지 판단 하고 복잡 도 는 O (n ^ 2) 입 니 다.
2. 입력 한 배열 이 정렬 되 지 않 았 지만 안에 있 는 숫자의 범 위 를 알 고 다른 조건 이 변 하지 않 는 다 면 어떻게 O (n) 시간 에 이 두 숫자 를 찾 습 니까?
숫자 범 위 를 알 면 정렬 을 계산 하 세 요. 다른 것 은 O (n) 와 같 습 니 다.
3. 숫자 범 위 를 모른다 면?
이것 은 hash 에 의존 해 야 합 니 다. 먼저 O (n) hash 를 한 다음 에 A 에 대해 hash 가 K - A 가 존재 하 는 지 찾 으 면 존재 하 는 지 찾 을 수 있 습 니 다.복잡 도 O (n)
4. 구 글 면접 문제: 무질서 한 배열 에 연속 몇 개의 숫자 와 N 이 있 는 지 여부
분석: 1. 폭력 O (n ^ 3)
2. 다음 f (I, n) = f (I, n - 1) + a [i] [n] 회 O (n) 를 최적화 하고 n 개 i 에 대한 총 복잡 도 는 O (n ^ 2) 이다.
3. 슬 로 우 포인터 I, j.K 보다 작 으 면 j 증가;그렇지 않 으 면 i 가 증가 하고 I = = J 의 상황 에 주의해 야 한다. ij 는 거 슬러 올 라 가지 않 고 최대 2n 걸음 이기 때문에 복잡 도 는 O (n) 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 프로그래머 면접에서의 다중 스레드 문제 요약wait ()/notify ()/notify All () 의 모든 방법을 호출할 때, 현재 라인이 이 대상의 자물쇠를 얻지 못하면, Illegal MonitorState Exception의 이상을 던집니다. Thre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.