演算法筆記(一)
一、給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
這裡用到了異或的思想,異或就是相同為0,不同為1。用二進位制表示更為直觀,例1 [2,2,1]轉換為二進位制就是[10,10,01],按位異或,10和10異或後得00,然後00與01異或,得01,即最終答案。如果使例2的情況依次異或可能手算有些慢,因異或有交換律,所以可以直接看成同數異或為0,得到答案4。**如下:
public class solution
}
注:/直接忽略小數,%取餘(容易忘記),之前就是忘記了,用了math.floor向下取整結果報錯了。
然後學習了摩爾投票法,題中給定眾數是在陣列**現次數大於 ⌊ n/2 ⌋ 的元素,大致思想可以概括為陣列內不同元素兩兩抵消,因為眾數大於 ⌊ n/2 ⌋ ,所以剩下來的那個數就是眾數。
public class solution
return false;
}}
《演算法導論》筆記一
看 introduction to algorithms,second editon 裡面提到插入排序和選擇排序,這兩個演算法的時間複雜度是一樣的。比較這兩個演算法的時候,我發現其實它倆是一回事。插入排序是把新元素插入到已經排好了序的序列裡,我們知道執行當前操作需要插入的數字 而在選擇排序中,需要插...
學習《演算法筆記》(一)
1.vector 變長陣列 vector 型別名 name 通過下標訪問,如name 0 push back x 在vector後面新增乙個元素x pop back 刪除vector的尾元素 size 獲得vector中元素的個數 clear 清空vector中所有元素 insert it,x 在i...
演算法筆記一 概述
分析乙個演算法,主要是考量它的執行的時間代價和空間代價,而在評估時間代價時,還要分析下最好情況下的代價和最壞情況下的代價。最好情況,用來分析該演算法的最佳應用場景 最壞情況,用來確定該演算法的最長執行時間的上限 某些演算法可能會更加的關注於平均情況,當平均情況趨向於較好情況時,是有意義的,這裡就需要...