棧和排序 貪心 思維

2021-10-07 06:11:30 字數 1213 閱讀 6943

題目描述

給你乙個1->n的排列和乙個棧,入棧順序給定

你要在不打亂入棧順序的情況下,對陣列進行從大到小排序

當無法完全排序時,請輸出字典序最大的出棧序列

輸入描述:

第一行乙個數n

第二行n個數,表示入棧的順序,用空格隔開,結尾無空格

輸出描述:

輸出一行n個數表示答案,用空格隔開,結尾無空格

示例1輸入複製5

2 1 5 3 4

輸出複製

5 4 3 1 2

說明2入棧;1入棧;5入棧;5出棧;3入棧;4入棧;4出棧;3出棧;1出棧;2出棧

思路:對於數a[i],如果說它等於[i,n]之間的最大值,那麼它就可以優先輸出。如果說不等於的話,就說明[i,n]之間有比a[i]大的數字,那麼就將a[i]保留下來。假如a[i]符合第一種情況,而保留的那個陣列中第乙個數x,大於a[i+1]的話,說明[i+1,n]沒有比x大的了,這個時候要先輸出x。

**如下(用stack應該更好一些,這個題目我用的vector):

#

include

#define

lllong

long

using

namespace std;

const

int maxx=

1e6+

100;

vector<

int> p1,p2,p3;

int a[maxx]

;int n;

intmain()

a[n+1]

=0;for

(int i=n;i>=

1;i--

) a[i]

=max

(a[i+1]

,p1[i]);

p3.push_back(0

);for(

int i=

1;i<=n;i++)}

}while

(p2.

size()

) p3.

push_back

(p2.

back()

),p2.

pop_back()

;for

(int i=

1;i<=n;i++

) cout<<<

" ";

return0;

}

努力加油a啊,(o)/~

貪心 思維 列舉

題目大意 左括號和右括號數量相等的個數 思路 從開始列舉,用兩個標記指標,乙個記錄左括號和右括號的數量,出現乙個左括號 出現乙個右括號 出現乙個?號的話我們先把它當成右括號 所以 左括號 但是問號也要記錄下來 所以問號 當 左括號的數量為零的時候說明左括號和右括號的數量相等,所以答案加1,但是如果左...

Recovery 貪心 思維

題目傳送門 點我 題意 給你乙個10字串,1代表奇數個1,0代表偶數個1,請你還原出1最多且二進位制的值最小的矩陣。include using namespace std define max n 65 char r max n c max n 存放行jox,列jox char matrix max...

D Slime 貪心,思維

模擬一 下,比如 4個 數模擬一下,比如4個數 模擬一下,比 如4個數a,b,c,da,b,c,d a,b,c,d b 吃c,吃 d,然後 a吃b,最後a能 力是a b c d b吃c,吃d,然後a 最後a能力是a b c d b吃c,吃d,然 後a 最後a 能力是a b c d a 吃b,吃 c,...