별도의 공간을 사용하지 않고 창고를 뒤바꿀 수 있습니까?
3271 단어 System
분석: 언뜻 이 제목을 보자마자 첫 번째 반응은 창고에 있는 모든 원소를 하나하나 팝업해서 한 그룹에 넣고 그 다음에 그룹에서 모든 원소를 뒤바꾸어 마지막에 그룹의 모든 원소를 하나하나push로 창고에 넣는 것이다.이때 창고도 뒤바뀌었다.하나의 수조를 뒤바꾸는 것은 매우 쉬운 일이다.그러나 이런 사고방식은 길이가 O(n)인 그룹을 분배하는 것을 보여야 하고 귀속의 특성을 충분히 이용하지 못한다.
우리는 어떻게 귀속할지 다시 한번 고려해 보자.우리는 창고 {1, 2, 3, 4, 5}를 두 부분으로 구성한다. 창고 꼭대기 원소 1과 나머지 부분 {2, 3, 4, 5}이다.만약에 우리가 {2, 3, 4, 5}를 뒤집어서 {5, 4, 3, 2}로 바꾸고 원래의 창고 꼭대기 원소 1을 밑에 놓을 수 있다면 전체 창고는 뒤집어져서 {5, 4, 3, 2, 1}로 변한다.
다음에 우리는 두 가지 일을 고려해야 한다. 첫째, 어떻게 {2, 3, 4, 5}를 거꾸로 해서 {5, 4, 3, 2}로 바꿀 것인가.우리는 {2, 3, 4, 5}를 두 부분으로 구성된다고 보기만 하면 창고 꼭대기 원소 2와 나머지 부분 {3, 4, 5}이다.우리는 {3, 4, 5}를 먼저 뒤집어서 {5, 4, 3}로 만든 다음에 이전의 창고 꼭대기 원소 2를 맨 밑에 놓으면 {5, 4, 3, 2}가 된다.
{3, 4, 5}를 어떻게 거꾸로 하는지... 많은 독자들이 이것이 귀속이라고 생각할 것이다.즉, 매번 창고를 뒤집으려고 시도할 때마다 현재 창고 꼭대기 원소가 팝업되고 나머지 원소로 구성된 창고를 뒤집고 마지막으로 이전의 창고 꼭대기 원소를 나머지 원소로 구성된 창고의 밑에 놓는다.귀속이 끝난 조건은 남은 창고가 이미 비어 있다는 것이다.이러한 사고방식의 코드는 다음과 같다.
만약에 제가 먼저 int를 예로 들게요.
//ReverseStack3.cpp: 콘솔 프로그램의 입구점을 정의합니다.//
#include "stdafx.h"#include
void AddToButton(stack
} void ReverseStack(stack
// ReverseStack3.cpp : 。
//
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
/*
if(Stack.empty())
{
Stack.push(data);
}
else
{
int top=Stack.top();// 2 1
Stack.pop();
AddToButton(Stack,data);
Stack.push(top);//1 2
}
*/
void AddToButton(stack<int>& Stack,int data)
{
if (Stack.empty())
{
Stack.push(data);
}
else
{
int top=Stack.top();
Stack.pop();
AddToButton(Stack,data);
Stack.push(top);
}
}
void ReverseStack(stack<int>& Stack)
{
if (!Stack.empty())
{
int top=Stack.top();
Stack.pop();
ReverseStack(Stack);
AddToButton(Stack,top);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={1,2,3,4,5};
stack<int> T;
for (int i=0;i<5;i++)
{
T.push(a[i]);
}
ReverseStack(T);
while (!T.empty())
{
cout<<T.top();
T.pop();
}
system("pause");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bring application to foreground with a keypressFrom Forum Nokia Wiki Inorder to capture the keys while you application under background you've to override CCoeAppUi::H...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.