此程式實現了乙個查詢出棧中最小元素的時間複雜度為0的棧。
此函式在進棧出棧的時候都進行了判斷,
進棧時,若當前的元素小於之前的最小元素,則把當前元素記錄進該元素的最小元素中,並輸出更改最小元素的資訊。
出棧時,若當前的最小元素小於出棧後棧中的最小元素,則輸出更改最小元素的資訊。
**如下:
#include #include #include #define datatype char
typedef struct elemtype;
typedef struct stack;
void stack_init(stack &st , int stsize) // 初始化棧
void min_find(stack st , datatype &e) // 查詢棧中最小元素,時間複雜度為o
e = st.stelem[st.top].min;
}void stack_pop(stack &st , datatype &e) // 出棧
else
e = st.stelem[st.top].elem;
st.top--;
printf("pop elem '%c' succeed !\n",e);
if(flag) }}
void stack_push(stack &st , datatype e) // 出棧函式
st.top++;
st.stelem[st.top].elem = e;
st.stelem[st.top].min = (st.top == 0 ? e : st.stelem[st.top - 1].min);
printf("push new elem '%c' into stack succeed !\n",e);
if(st.stelem[st.top].min > e)
}void stack_free(stack &st) // 釋放申請的記憶體
void stack_test() // 此程式的測試函式
printf("\npoping from stack...\n");
while(s.top >= 0)
stack_free(s);
}int main()
如何用O 1 的時間複雜度求棧中最小元素
class stack def init self self.items def empty self return len self.items 0 def size self return len self.items def peek self if not self.empty return...
0 時間複雜度
快 時間複雜度 省 空間複雜度 def get sum n result 0 for i in range 1,n 1 result i return result假設每行 對應的cpu執行時間一樣,為乙個時間單位unit time 可以看到該函式第2 5行執行1次,第3 4行執行n次 總共執行時間...
時間複雜度為O n 的排序
題目 某公司有幾萬名員工,請完成乙個時間複雜度為o n 的演算法對該公司員工的年齡作排序,可使用o 1 的輔助空間。分析 排序是面試時經常被提及的一類題目,我們也熟悉其中很多種演算法,諸如插入排序 歸併排序 氣泡排序,快速排序等等。這些排序的演算法,要麼是o n2 的,要麼是o nlogn 的。可是...