증가 순서에 따라 카드 를 표시 하 다.

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, 선진 선 출.삽입 작업 을 하 는 단 을 팀 의 끝 이 라 고 하고 삭제 작업 을 하 는 단 을 팀 의 머리 라 고 합 니 다. 쌍 단 대기 열: 대기 열의 양 끝 에 삽입 하고 삭제 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기