關於程式設計中的 左右條件交換出現用時不一樣的問題

2021-09-25 02:02:10 字數 715 閱讀 2938

今天二刷劍指offer時,刷到 棧的壓入、彈出序列這道題時,出現了乙個有意思的現象,題目以及程式如下:

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

做題思路在這裡就不細說了,**也不長。

首先下面是執行通過的**:

bool ispoporder(vectorpushv,vectorpopv) 

}return res.empty();

}

在第7行的

while((res.size()) && (res.top()==popv[j]))
如果將&&左右兩邊的條件交換順序,變成

while((res.top()==popv[j]) && (res.size()))
直接會出現段錯誤的情況,通過率0%。

經過一番搜尋發現,造成這種的原因應該是:

執行&&時,是有先後順序的,即先判斷&&左邊的條件,只有&&左邊的條件為真時,才會接著判斷&&右邊的條件。因此我們使用&&時,盡量的將判斷條件簡單的放在&&的左邊,將判斷條件複雜的放在&&右邊,這樣從整體來講會更加的節約時間。

Linux shell程式設計中的判斷條件

b file 若檔案存在且是乙個塊特殊檔案,則為真 c file 若檔案存在且是乙個字元特殊檔案,則為真 d file 若檔案存在且是乙個目錄,則為真 e file 若檔案存在,則為真 f file 若檔案存在且是乙個規則檔案,則為真 g file 若檔案存在且設定了sgid位的值,則為真 h fi...

關於SpringBoot中基於條件的自動裝配

if 符合 conditional規定的條件 import org.springframework.context.annotation.condition import org.springframework.context.annotation.conditioncontext import o...

關於與條件判斷中的順序

原來還從來沒有注意到這個問題,關於條件與 的判斷先後問題,比如說 1 while stackhelp.isempty top stackhelp.peek 4 stackhelp.push top while top stackhelp.peek stackhelp.isempty stackhel...