증가 순서에 따라 카드 를 표시 하 다.
3288 단어 알고리즘
카드 그룹의 모든 카드 는 하나의 유일한 정수 에 대응한다.너 는 네가 원 하 는 순서에 따라 이 카드 를 정렬 할 수 있다.
처음에 이 카드 들 은 카드 그룹 에서 정면으로 아래로 향 했다 (즉, 상태 가 표시 되 지 않 았 다).
모든 카드 가 표 시 될 때 까지 다음 절 차 를 반복 합 니 다.
카드 그룹 상단 에서 카드 를 뽑 아 표시 한 다음 카드 그룹 에서 꺼 냅 니 다.카드 그룹 에 카드 가 남아 있다 면 다음 카드 그룹 상단 에 있 는 카드 를 카드 그룹의 아래쪽 에 놓 습 니 다.표시 되 지 않 은 카드 가 있다 면 1 단계 로 돌아 갑 니 다.그렇지 않 으 면 행동 을 멈 춰 라.카드 를 점차 늘 릴 수 있 는 카드 그룹 순 서 를 되 돌려 줍 니 다.
답 의 첫 번 째 카드 는 카드 더미 꼭대기 에 있 는 것 으로 여 겨 진다.
:
:[17,13,11,2,3,5,7]
:[2,13,3,11,5,17,7]
:
[17,13,11,2,3,5,7]( ), 。
, [2,13,3,11,5,17,7] , 2 。
: 2, 13 。 [3,11,5,17,7,13]。
: 3, 11 。 [5,17,7,13,11]。
: 5, 17 。 [7,13,11,17]。
: 7, 13 。 [11,17,13]。
: 11, 17 。 [13,17]。
: 13, 17 。 [17]。
: 17。
, 。
먼저 알고리즘 을 어떻게 쓰 는 지 를 고려 하지 않 습 니 다. 사실 위의 카드 순 서 는 쌍 단 대기 열 Deque 의 조작 출 팀 과 입 팀 작업 입 니 다. 예 를 들 어 위의 첫 번 째 단 계 를 가지 고 말씀 하 세 요. 첫 번 째 단계 의 언어 설명 은 2 팀 을 나 오 게 한 다음 에 13 팀 을 대열 의 꼬리 에 삽입 하 는 것 으로 바 꿀 수 있 습 니 다!그러면 본 문제 의 예 시 는 다음 과 같은 언어 설명 으로 바 꿀 수 있다.
, [2,13,3,11,5,17,7] , 2 。
: 2 , 13 , 13 。 [3,11,5,17,7,13]。
: 3 , 11 , 11 。 [5,17,7,13,11]。
: 5 , 17 , 17 。 [7,13,11,17]。
:7 , 13 , 13 。 [11,17,13]。
:11 , 17 , 17 。 [13,17]。
:13 , 17 , 17 。 [17]。
:17 。
그래서 지금 이 문제 풀이 의 방향 은 매우 간단 하 다. 원 배열 을 증가 하 는 순서 로 정렬 한 다음 에 위의 절 차 를 거꾸로 미 루 면 최종 결 과 를 얻 을 수 있다. 즉, [2, 13, 3, 11, 5, 17, 7].역 추 란 무엇 인가? 바로 일곱 번 째 단계 부터 첫 번 째 단계 까지 의 출전 과 입단 순 서 를 반대로 하 는 것 이다. 예 를 들 어 여섯 번 째 단계, 반대로 17 번 팀 이 팀 의 선두 에 들 어간 다음 에 13 번 팀 에 들 어가 면 우 리 는 [13, 17] 을 얻 을 수 있다.이 문제 풀이 알고리즘 의 역 추진 과정 은 다음 과 같다.
:[2,3,5,7,11,13,17]
:17 。 [17]
:17 , 17 ,13 。 [13,17]
:17 , 17 ,11 。 [11,17,13]
:13 , 13 ,7 。 [7,13,11,17]
:17 , 17 ,5 。 [5,17,7,13,11]
:11 , 11 ,3 。 [3,11,5,17,7,13]
:13 , 13 ,2 。 [3,11,5,17,7,13]
발견 되 지 않 았 습 니 다. 역 추 하 는 과정 에서 이 팀 의 요 소 는 원래 대열 의 끝 에 있 었 습 니 다. 그리고 팀 을 나 간 후에 대열 의 첫 번 째 부분 에 삽입 되 었 습 니 다. 즉, 코드 는 다음 과 같 습 니 다.
deque.offerFirst(deque.pollLast());
그래서 최종 알고리즘 코드 는 다음 과 같다.
public int[] deckRevealedIncreasing(int[] deck) {
Arrays.sort(deck);
Deque deque = new LinkedList<>();
// 17
deque.offerFirst(deck[deck.length - 1]);
for (int i = deck.length - 2;i >= 0; i--) {
//
deque.offerFirst(deque.pollLast());
//
deque.offerFirst(deck[i]);
}
int[] res = new int[deck.length];
for (int i = 0;i < deck.length;i++) {
res[i] = deque.pollFirst();
}
return res;
}
데이터 구조 지식 포인트 픽업: 대기 열: 특성 FIFO, 선진 선 출.삽입 작업 을 하 는 단 을 팀 의 끝 이 라 고 하고 삭제 작업 을 하 는 단 을 팀 의 머리 라 고 합 니 다. 쌍 단 대기 열: 대기 열의 양 끝 에 삽입 하고 삭제 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.