[leetcode] 검 지 Offer 09. 두 스 택 으로 대기 열 (yong - liang - ge - zhan - shi - xian - du - li - lcof) (데이터 구조) [간단]

링크
https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
시간 을 소모 하 다
문제 풀이: 10 min 문제 풀이: 9 min
제목
두 개의 창고 로 하나의 대열 을 실현 하 다.대기 열의 성명 은 다음 과 같 습 니 다. 두 함수 appendTail 과 deleteHead 를 실현 하여 각각 대기 열 끝 에 정 수 를 삽입 하고 대기 열 머리 에 정 수 를 삭제 하 는 기능 을 완성 하 십시오.(대기 열 에 요소 가 없 으 면 deleteHead 작업 반환 - 1)
사고의 방향
스 택 두 개, st1 과 st2 를 설정 합 니 다.입대 시 원 소 를 st1 에 직접 넣는다.팀 을 나 갈 때 먼저 st2 가 비어 있 는 지, 비어 있 으 면 st1 의 요소 순 서 를 st2 에 넣 으 면 st2 에서 정상 적 인 순서 로 스 택 을 나 갈 수 있 습 니 다.st2 가 비어 있 지 않 으 면 st2 스 택 상단 요 소 를 바로 꺼 내 면 됩 니 다.PS: 팀 을 나 갈 때 st2 가 비어 있 을 때 st1 이 비어 있 는 지 확인 하 는 것 을 잊 지 마 세 요. st1 도 비어 있 으 면 대기 열 에 요소 가 없 음 을 설명 합 니 다. - 1 로 돌아 가 야 합 니 다.
AC 코드
class CQueue {
public:
    stack<int> st1, st2;
    
    CQueue() {
        while(!st1.empty()) {
            st1.pop();    
        }
        while(!st2.empty()) {
            st2.pop();    
        }
    }
    
    void appendTail(int value) {
        st1.push(value);
    }
    
    int deleteHead() {
        if(st2.empty()) {
            if(st1.empty()) return -1;
            while(!st1.empty()) {
                st2.push(st1.top());
                st1.pop();
            }
        }
        int ans = st2.top();
        st2.pop();
        return ans; 
    }
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

좋은 웹페이지 즐겨찾기