給⼀個⻓度為 n 的陣列,其索引應該在 [0,n) ,但是現在你要裝進去 n + 1個元素 [0,n] ,那麼肯定有⼀個元素裝不下嘛,請你找出這個缺失的元素。
方法一把這個陣列排個序,然後遍歷⼀遍。排序解法的時間複雜度是 o(nlogn)
方法二借助資料結構的特性,⽤⼀個 hashset 把陣列⾥出現的數字都儲存下來,再遍歷 [0,n] 之間的數字,去 hashset 中查詢
hashset 的解法時間複雜度是 o(n),但是還需要 o(n) 的空間複雜度儲存 hashset。
方法三位運算。
對於異或運算( ^ ),我們知道它有⼀個特殊性質:⼀個數和它本⾝做異或運算結果為 0,⼀個數和 0 做異或運算還是它本⾝。
⽽且異或運算滿⾜交換律和結合律,也就是說:2 ^ 3 ^ 2 = 3 ^ (2 ^ 2) = 3 ^ 0 = 3
假設先把索引補⼀位,然後讓每個元素和⾃⼰相等的索引相對應,這樣好理解,做的時候不用一一對應:
可以發現除了缺失元素之外,所有的索引和元素都組成⼀對⼉了,現在如果把這個落單的索引 2 找出來,也就找到了缺失的那個元素。
只要把所有的元素和索引做異或運算,成對⼉的數字都會消為 0,只有這個落單的元素會剩下,也就達到了我們的⽬的。
由於異或運算滿⾜交換律和結合律,所以總是能把成對⼉的數字消去,留下缺失的那個元素的。
時間複雜度 o(n),空間複雜度 o(1),已經達到了最優
int missingnumber(int nums)
return res;
}
方法四
等差數列求和公式。
題⽬的意思可以這樣理解:現在有個等差數列 0, 1, 2,…, n,其中少了某⼀個數字,請你把它找出來。那這個數字不就是 sum(0,1,…n) - sum(nums)嘛?
int missingnumber(int nums)
由於加減法滿⾜交換律和結合律,所以總是能把成對⼉的數字消去,留下缺失的那個元素 python尋找多數元素 尋找多數元素
今天實現的演算法是尋找多數元素,多數元素是指在乙個含有n個元素的序列 現次數多於 n 2 向下取整 的元素。蠻力尋找多數元素是對每個元素進行計數,如果某個元素的計數超過 n 2 則斷言它是多數元素,否則不存在多數元素。這種方法的時間複雜度過高,可以尋找更高效能的演算法解決這類問題。如果乙個序列存在多...
CSS讓元素消失的方法
1.position absolute top 999px left 999px 比元素本身的width和height大即可 2.display none 3.visibility hidden 4.height 0 or width 0 前提是沒有border 5.opacity 0 6.tran...
小心你的元素會消失
今天我們一起看下,在wpf裡填充對齊 strectch 下margin屬性對元素的影響 首先我們先新建專案,並改下背景色大小之類的。為了方便對比先新增兩個中心對齊的矩形 冒充下對齊線,好像豎著的偏左了一點,有強迫症的將就下!初步介面已經好了,現在我們新增實驗物件按鈕 button 簡單的改了下樣式 ...