奇妙bug記錄(1)

2021-09-29 07:35:25 字數 1146 閱讀 8133

在做一道需要對二維陣列遍歷的題時,我莫名其妙地使用了列主序的迴圈順序,如下:

for

(int j =

0;j < n;j++

)}

對應的邏輯上完全等價的行主序寫法如下:

for

(int i =

0;i < n;i++

)}

正當我認為必a無疑地交上去的時候:

可以看到,時間為2045ms,而題目限制2000ms,百思不得其解,找來標程對比,就差在迴圈順序了,而行主序的迴圈順序,時間竟然比我這列主序的順序快了一倍:

仔細想了想(其實是助教的點撥),記得大一的時候學過,其實二維陣列在本質上也是一維陣列,二者的記憶體分布並沒有不同,都是一片連續的記憶體空間,做乙個聯合就知道了:

union

u;

在上述的聯合中,有如下等式:

&u.a ==

&u.b

&u.a[0]

==&u.b[0]

&u.a[1]

==&u.b[5]

&u.a[2]

==&u.b[10]

&u.a[2]

[3]==

&u.b[

13]

並且有如下規律:

&u.a[m]

[n]==

&u.b[m*

5+n]

//5是a的第二維的長度

回到之前的問題上,出現執行時間如此大差別的原因就很明顯了,對於行主序的迴圈順序,在定址時是乙個接乙個地往後走,每次只需要執行乙個下標+1的操作,就可以到達下乙個元素,如從dp[0][0]到dp[0][1];而對於列主序的迴圈順序,每次需要做一次定址公式:從dp[0][0]到dp[1][0],記憶體中做了一次+dp第二維長度的操作,這樣下來,在兩個維度的長度較小時看不出差別,但是當到達104級別時,反映出來的效率差別就是兩倍了。

對二維陣列進行遍歷時

一定要行主序!

一定要行主序!

一定要行主序!

for

(int i =

0;i < n;i++

)}

iOS 奇妙bug集錦

最近設計師想要使用某款非系統字型的數字字型,想了個辦法把數字字型提取出來 提取工具是fontzip,提取完才7kb 放到專案中,正常執行,但到組裡其他人的電腦上就會遇到ios10以下的模擬器,uilabel載入這個字型後,只要涉及到渲染的api 比如sizetofit 就會崩潰,崩潰是停在類似於以下...

bug修復記錄

telnet ping netaddr traceroute netaddr 這是乙個linux下的命令可以通過vmmap觀察程式執行時所需要的依賴庫協議裡面涉及到陣列的,一定要判斷最大值 basegamelibdata stlibbasedata gamelib基本資料 uint32 t dwui...

Bug記錄 歸納

之前若干 不要完全依賴web端 移動端,期待他們傳正確的值 第三方介面呼叫是否捕獲異常取決於業務有沒有這個必要 不傳有預設值或者是空值,不一定要要求前端一定傳 介面考慮版本相容處理,實在區別很大,可以公升版本。2017年8月1日 新增字段,需要考慮關聯影響,比如說乙個模組加了乙個新的字段,那麼涉及的...