今天看了csdn社群中sungj0917提出的問題:有n個整數,有什麼好的演算法確定這n個數是連續的嗎
於是我寫了乙個o(n)的演算法,當然,我用空間換時間,也就是說用了很多變數記錄,希望大家丟磚。
演算法支援重複數字。
思路如下:遍歷一次(目前是沒想到如何避免遍歷),在遍歷過程中做以下事:
1. 記錄最大max,最小數min。
2. 用hashtable(實際上可以用任何陣列)記錄各個數字的前後連線情況。
/// hash[i] = 0; 表示i出現過
/// hash[i] = 1; 表示i前面連續
/// hash[i] = 2; 表示i後面連續
/// hash[i] = 3; 表示i前後連續
3. 並記錄不連續的數字個數singlecount。
遍歷時,每遇見乙個數字i就判斷i的前後是否連續,並在判斷過程中更新hashtable[i] ,並再判斷其前後的資料i-1,i+1的連續情況。
數字i第一次出現時,則singlecount加1,如果hashtable[i]變成了3,則singlecount減1 最後,如果連續則singlecount==2,因為max和min必定只有半邊連續。且hashtable[max]==1,hashtable[min]=2.
程式碼如下(c#版本)
判斷乙個數是否為2的N次方
package aboutmove 判斷是否為2的次方 public class aboutmove return false public static void main string args 注意點千萬不能在第15行寫成n 1 因為6 2 3 3 2 1這是整形 時間複雜度為o logn 演...
(C語言)判斷n是否為素數
題目 輸入乙個大於3的整數n,判斷它是否為素數。輸出yes no 例如,輸入4,輸出no 輸入7,輸出yes。錯誤輸入,則輸出error。所有輸出沒有回車符號。乙個只能被他自身或者1整除的數稱為素數 這裡還有乙個簡便的方法是 設乙個數m,m 不必被 2 m 1 之間的每乙個整數去除,只需被 2 之間...
用python判斷乙個數是否為2的n次方
2true我的 如下 n int input if n n 1 0 print true else print false 我的思路 看到這個問題首先想到的就是迴圈來做,應該能做出來,不過要是數字較大估計記憶體會溢位。轉換為二進位制,轉換幾個看看規律 for i in range 0 10 prin...