演算法 佇列和棧

2021-09-26 18:36:26 字數 3078 閱讀 1677

雙端佇列的首部和尾部都可以亞壓入元素

public class statck ;

stacktest(array);

}public static void stacktest(int array)else else

data.push(array[i]);}}

system.out.println("每一步棧的最小值:");

while (!min.isempty())

system.out.println();

system.out.println("data棧:");

while (!data.isempty())

}}

注意:

public class statck ;

add(array);

pop(array);

peek(array);

pop(array);

}public static void add(int array)

for (int i = 0; i < array.length; i++)

}public static void pop(int array)

}public static void peek(int array)

system.out.println();

}}

public class statck 

}//取棧底的值

public static int getbottom(stackstack) else

}//逆序棧

public static void reserve(stackstack)else

}}

注意點:

public class statck 

public static void compare(stackintegers1)

while (!integers1.isempty() && integers2.size() >= 0)

if(!integers2.isempty())

count ++;

}if(mid <= pop2)

integers2.push(mid);

for (int i = 0; i < count; i++)

}while (!integers2.isempty())

while (!integers1.isempty())

}//取棧底的值

}

最優解可以做到時間複雜度為:o(n)

思路:

0放到雙端佇列中

依次從陣列中取乙個數進入雙端佇列中,從雙端佇列的最頂端的數依次比較,>比頂端的數所對應的陣列元素大,移除頂端的數,再取頂端的數比較,直到小於等於頂端的數,將該數的下標新增進去。

一直重複步驟2,直到陣列的小標到達w-1。

思路:

初始化完成之後:

public class dqueuetest ;

getmax(ints, 3);

}//初始化雙端佇列,雙端佇列中儲存的是元素的下標,新來的數把比他小的數全踢出去,後來的小的數保留

public static deque getinitialmax(int array, int length)

dqueue.push(0);

int i = 1;

while (i < length) else

}iterator iterator = dqueue.iterator();

system.out.println();

return dqueue;

}public static void getmax(int array, int length)else

//接著將資料放到合適的位置

while (!initialmax.isempty() && array[start] >= (int)initialmax.peekfirst())

initialmax.push(array[start]);

score[key++] = (int)initialmax.peeklast();

start ++ ;

}for (int i = 0; i < score.length; i++)

}}

思路:

對於陣列中的每乙個元素,找左邊比他大的第乙個元素,再找右邊比他大的第乙個元素,兩個元素中最小的數作為其父節點即可。

public class builetree 

if(deque.isempty())else

deque.push(node[i]);

}deque deque1 = new linkedlist<>();

for (int i = node.length - 1; i >= 0; i--)

if(deque1.isempty())else

deque1.push(node[i]);

}for (int i = 0; i < node.length; i++) else

}else if (rnode[i] == null && lnode[i] != null) else

}else if(rnode[i] == null && lnode[i] == null){}

else if(lnode[i] != null && rnode[i] != null) else

} else else }}

}node node1 = (node) deque.polllast();

sortnode(node1);

}public static void sortnode(node node)

if(node.getlnode() != null)

if(node.getrnode() != null)

}}

棧和佇列演算法

1 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值 的時間 複雜度為o 1 方法1 使用乙個棧實現,交叉棧 pragma once include define max value 100 typedef struct minstackminstack 實現乙個棧,要求實現pu...

演算法 棧和佇列

佇列public inte ce mystackextends iterable public class arraystackimplements mystack override public item pop throws exception item item a n check 避免物件游...

演算法專題 棧和佇列

在j a中棧使用arraydeque和linkedlist,這兩個集合類既實現了list介面,也實現了deque介面。因此以上集合類可以當棧也可以當雙端佇列使用。1 使用兩個棧完成getmin功能,分別為data棧和min棧 壓入規則 將資料壓入data棧,判斷min棧是否為空 彈出規則 將data...