輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,
5,3,2,1
是該壓棧序列對應的乙個彈出序列,但
4,3,5,1,2
就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
解析:本題思路為:將入棧序列逐個加入,如果加入的等於出棧的,就將其加入後彈出,妙。
class solution
} return stack.empty();
} };
從上往下列印出二叉樹的每個節點,同層節點從左至右列印。
解析:一時想不起二叉樹的層次遍歷.....腦子還真是笨。要判斷好如果左右子樹不是空才入對列。
class solution
return result;
} };
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出
no。假設輸入的陣列的任意兩個數字都互不相同
解析:本題雖然想到了,序列中最後乙個肯定為根,然後前面一部分為右子樹(大於根),另一部分為左子樹(小於根)。也想到遞迴解決,但是沒想好到底怎麼遞迴。
class solution
public:
bool verifysquenceofbst(vectora) };
4輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
class solution
tmp.pop_back();
//回退。}
public:
vector> findpath(treenode* root,int expectnumber) };
5輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
class solution
pcur = phead;
//複製
random pcur
是原來鍊錶的結點
pcur.next
是複製pcur
的結點while(pcur!=null)
randomlistnode *head = phead->next;
randomlistnode *cur = head;
pcur = phead;
//拆分鍊錶
while(pcur!=null)
return head;
}}; 6
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
本題遞迴,中序遍歷二叉樹,記錄上乙個節點,本節點左子樹指向上乙個節點,上乙個節點右子樹指向本節點。
class solution
pre=prootoftree;
lastleft=lastleft==null?prootoftree:lastleft;
//找到結果的開始地方。要麼最左下,要麼根節點。
convert(prootoftree->right);
return lastleft;
} };
7 求出1~13的整數中
1出現的次數
,並算出
100~1300
的整數中
1出現的次數?為此他特別數了一下
1~13
中包含1
的數字有1、
10、11、
12、13因此共出現6次
,但是對於後面問題他就沒轍了。
acmer
希望你們幫幫他
,並把問題更加普遍化
,可以很快的求出任意非負整數區間中
1出現的次數。/*
設n = abcde ,其中
abcde
分別為十進位制中各位上的數字。
如果要計算百位上1出現的次數,它要受到
3方面的影響:百位上的數字,百位以下(低位)的數字,百位以上(高位)的數字。
① 如果百位上數字為0
,百位上可能出現
1的次數由更高位決定。比如:
12013
,則可以知道百位出現
1的情況可能是:
100~199
,1100~1199,2100~2199
,,...
,11100~11199
,一共1200
個。可以看出是由更高位數字(
12)決定,並且等於更高位數字(
12)乘以 當前位數(
100)。
② 如果百位上數字為1
,百位上可能出現
1的次數不僅受更高位影響還受低位影響。比如:
12113
,則可以知道百位受高位影響出現的情況是:
100~199
,1100~1199,2100~2199
,,....
,11100~11199
,一共1200
個。和上面情況一樣,並且等於更高位數字(
12)乘以 當前位數(
100)。但同時它還受低位影響,百位出現
1的情況是:
12100~12113,
一共114
個,等於低位數字(
113)+1。
③ 如果百位上數字大於1
(2~9
),則百位上出現
1的情況僅由更高位決定,比如
12213
,則百位出現
1的情況是:
100~199,1100~1199
,2100~2199
,...
,11100~11199,12100~12199,
一共有1300
個,並且等於更高位數字+1(
12+1
)乘以當前位數(
100)。
*/
public class solution
//前移一位
i = i*10; }
return count; }
} 8c++如何將
int轉為
string
for(int i=0;i
stringstream ss;
ss<
string s = ss.str();
strnum.push_back(s); }
牛客網 程式設計題2
給定乙個陣列序列,需要求選出乙個區間,使得該區間是所有區間中經過如下計算的值最大的乙個 區間中的最小數 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列 6 2 1 則根據上述公式,可得到所有可以選定各個區間的計算值 6 6 6 36 2 2 2 4 1 1 1 1...
牛客網程式設計題
參考了排行榜大神 1.計算字串最後乙個單詞的長度,單詞以空格隔開 a raw input b a.split print len b 1 2.寫出乙個程式,接受乙個有字母和數字以及空格組成的字串,和乙個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫 a raw input lower b r...
牛客網程式設計(四)
ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定大 小...