매우 흥미로운 질문, 각 요소에 대해, 우리는 두 가지 선택이있다 :
1. 그것은의 추가에 좋은 직선 구성 이전입니다
2. 새 직선을 열 때 사용
여기에 욕심 전략, 하나는 항상 새로운 오픈 준코가 실패 할 수 있기 때문에도 새롭게 문을 연 바로 성공하지만 하나가 충족 될 때 준코 준코 가입하기 전에, 열리고, 1을 충족하는 첫번째 만날 수있는 경우 성공, 필요가 선택 정책이 위험을 감수하지하는 전략을 선택하는 것이 가능하다.
따라서, 우리는 기록을 똑바로뿐만 아니라 새로운 판단을 바로 열 수 없습니다 수있는 각 요소의 주파수를 알고 끝까지 해시 테이블이 필요합니다.
클래스 해결 { 공개 : BOOL isPossible (벡터 < INT > & nums) { unordered_map도 < INT , INT > 카운트; 위한 ( INT의 NUM : nums ++) [NUM] 카운트; unordered_map도 < INT , INT > 꼬리; // 꼬리가 필요 -> NUM 대 ( INT의 NUM : nums)는 { 경우 ([NUM] 카운트 == 0 ) 계속을 ; - [NUM] 카운트; 만약(꼬리 [NUM]> 0 ) { // 기존의 시퀀스에 추가 - 카운트 [NUM]; --tails [NUM] == 0 ; ++ 꼬리 [NUM + 1 ]; } 다른 { // 새로운 시퀀스를 시작합니다 - [NUM] 계산 경우 (COUNT [NUM + 1 ] && 카운트 [NUM + 2 ]) { --count [NUM + 1 ]; --count [NUM + 2 ]; ++ 꼬리 [NUM + 3 ]; } 다른 돌아 거짓 ; } } 반환 사실 ; } };
O의 시간 복잡도 (N)