stack的基本操作
•s.size()
:返回棧中的元素數量
•s.empty()
:判斷棧是否為空,返回true或false
•s.push(元素)
:返回對棧頂部「元素」的可變(可修改)引用
•s.pop()
:刪除棧頂元素,型別為void,但並不返回被刪除的元素
•s.top()
:返回棧頂,不刪除
•s1==s2
:若成立,表明s1中的每個元素都等於s2的對應元素,返回true或是false
題目1:用兩個棧實現佇列
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
思路:比較簡單,兩個棧s1,s2 push的時候就往s1裡push,pop的時候,先把s1中的元素全部push到s2,再pop就是佇列順序。這個題也可以描述為如何讓棧逆序輸出
class題目2:滑動視窗最大值solution
intpop()
int res =stack2.top() ;
stack2.pop() ;
while(!stack2.empty())
return
res ;
}private
: stack
stack1;
stack
stack2;
};
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
思路:這個題o(n*k)很簡單,但是要o(n)就有說法了,o(n)的方法是雙向佇列
先看我的比較挫的版本,用了兩個佇列:
class再看網上大神的版本:乙個雙端佇列,**也比我簡潔。。。solution
for(int i=0;i)
else
q.push(nums[i]) ;
}ans.push_back(qmin.front()) ;
for(int i=k;i)
q.pop() ;
q.push(nums[i]) ;
while(!qmin.empty()&&qmin.back()
qmin.push_back(nums[i]) ;
ans.push_back(qmin.front()) ;
}return
ans ;}};
class題目3:數獨solution
for(int i=0;i)
return
ans ;}};
編寫乙個程式,通過已填充的空格來解決數獨問題。
乙個數獨的解法需遵循如下規則:
數字1-9
在每一行只能出現一次。
數字1-9
在每一列只能出現一次。
數字1-9
在每乙個以粗實線分隔的3x3
宮內只能出現一次。
空白格用'.'
表示。
乙個數獨。
答案被標成紅色。
note:
本來以為要用a*,結果發現直接搜也沒有超時,還有原題目是void函式,沒有返回真的難受,搜尋的題如果遞迴函式沒有返回那怎麼知道找到了沒啊。
最後發現別人強行把示例的函式改成了bool型,然後可以過。
最後複習一下個位數的int-》char就是num+'0',char->int就是str-『0』
classps:記錄兩個資料結構solution
if(i!=y&&board[x][y]==board[x][i])
}for(int i=3*(x/3);i<3*(x/3+1);i++)}}
return
true
; }
bool solvesudoku(vectorchar>>&board)
board[i][j] = '.'
; }
return
false
; }}}
return
true
; }
};
小頂堆和大頂堆(優先佇列):
priority_queue, less> maxheap; //儲存小的值,值越大,優先順序越高
priority_queue, greater> minheap; //
儲存大的值,值越小,優先順序越高
雙向佇列:
deq[ ]:用來訪問雙向佇列中單個的元素。
deq.front():返回第乙個元素的引用。
deq.back():返回最後乙個元素的引用。
deq.push_front(x):把元素x插入到雙向佇列的頭部。
deq.pop_front():彈出雙向佇列的第乙個元素。
deq.push_back(x):把元素x插入到雙向佇列的尾部。
deq.pop_back():彈出雙向佇列的最後乙個元素。
支援隨機訪問,即支援[ ]以及at(),但是效能沒有vector好。
可以在內部進行插入和刪除操作,但效能不及list。
deque兩端都能夠快速插入和刪除元素,而vector只能在尾端進行。
deque的元素訪問和迭代器操作會稍微慢一些,因為deque的內部結構會多乙個間接過程。
deque迭代器是特殊的智慧型指標,而不是一般指標,它需要在不同的區塊之間跳轉。
deque可以包含更多的元素,其max_size可能更大,因為不止使用一塊記憶體。
deque不支援對容量和記憶體分配時機的控制。
在除了首尾兩端的其他地方插入和刪除元素,都將會導致指向deque元素的任何pointers、references、iterators失效。不過,deque的記憶體重分配優於vector,因為其內部結構顯示不需要複製所有元素。
deque的記憶體區塊不再被使用時,會被釋放,deque的記憶體大小是可縮減的。不過,是不是這麼做以及怎麼做由實際操作版本定義。
deque不提供容量操作:capacity()和reverse(),但是vector可以。
刷題 棧和佇列
一 因為有太多遺忘的東西了,所以做題速度會很慢 現在理解題目,把題目理解好了,然後去看題解,看完題解,在去搜尋相關知識點進行補充。二 題目 三 理解 棧 先進後出 佇列 先進先出 要滿足題目的要求,我們要把棧底輸出出來,我們可以把棧倒著輸出,就可以滿足佇列的先進先出。所以我們需要兩個棧來,第乙個棧是...
刷題 棧和佇列(2)
一 題目 二 題目理解 1.用棧實現,所以既要滿足找到最小值,同時元素位置沒有變 我們可以用兩個棧進行實現,乙個主棧存放元素,另乙個副棧存放最小值,每當需要最小值的時候,我就top出副棧即可,需要當前位置的時候,top出主棧。三 展示 1 2 initialize your data structu...
刷題 搜尋 新數獨
很暴力的搜尋,還沒有什麼剪枝.心得 如果只查詢和修改,用bool比bitset快 rnt在迴圈中會比int快 減少簡單的函式呼叫 include include include include define rnt register int using namespace std int ans 1...