題目描述
給你乙個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,...