LeetCode 初級演算法 只出現一次的數字

2021-09-19 14:39:02 字數 1392 閱讀 6896

1、根據題目的介紹我們可以得到以下結論

方法一:

使用異或運算(^)

①有了以上結論,我們可以將陣列中的所有元素進行異或運算,得到的結果一定是單獨出現的元素。

②使用for迴圈從陣列第二位(即下標為1)的運算開始,每迴圈一次將該元素與nums[0]進行異或運算, 得到的結果再次賦給nums[0] ,即使用 ^= 運算子。

③此方法還有乙個好處就是保證當陣列長度為1時仍然能得到正確結果。

方法二:

該方法執行時間長,而且因為使用了arrays.sort(int[ ] a)方法,分析原始碼可知此方法的時間複雜度是o(n^3),不符合題意,但是這種想法依然是乙個非常好的想法。

奇數字元素與偶數字元素相減

① 在上面的結論中我們知道陣列的長度為奇數即( nums.length = 2 * x +1 );而重複的元素出現的次數均為2次。

②我們試想一下,如果將陣列中所有元素進行加減操作,若是相同的元素進行相減,其餘進行相加操作,最後得到的結果是不是就是單獨出現的元素呢?

③為了實現前面的想法,我們可以用arrays的靜態方法sort先對陣列進行公升序排列,排列之後相同的元素總是挨著的,例如對陣列 [ 1,5,6,1,6 ]進行公升序排列後得到的結果為 [ 1,1,5,6,6 ] 總共有5個元素,(注意以下所有的解釋中使用的是位數而不是下標,第1位對應的下標 index = 0)對第1、3、5位元素求和,再對第2、4位元素求和,將兩個和相減就會得到單獨的元素的值

④因為陣列長度是奇數,所以奇數字的個數和總是比偶數字的個數和多1,又因為對陣列排序後相同元素是挨著的,這樣就能保證相同的元素總是乙個在奇數字乙個在偶數字,所以兩個和相減之後會把所有相同的元素都減去,剩下的那個就是單獨出現的元素。

⑤在方法二中使用for迴圈,從第二位(下標index = 1)開始迴圈,使用三目運算子,如果是偶數字就與nums [0] 相減,如果是奇數字就與nums [0]相加,最後再賦給nums [0] ,直至迴圈完成。這樣可以保證當陣列長度為1時仍然能得到正確結果。

方法一:

class

solution

return nums[0];}}

方法二:

class

solution

return nums[0];}}

Leetcode初級演算法

不是很難的一道動態規劃的題,感覺做多了就記住了。class solution return dp n 此題想法就是,只要後面買的減去前面買的能大於0,就算在內,每次買完和max比較,大於max就記錄為max,如果買的sum小於0了,重新開始買,sum記為0 class solution if sum...

初級演算法 5 只出現一次的數字

題目 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4 解題思路 1.題目中要求線性空間,最簡單...

Leetcode 初級演算法02

了解的知識 1.空間複雜度 空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。這樣子理解起來有點困難,我們又了解到當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o 1 舉兩個例子 a.陣列的隨機訪問就是o 1 b.鍊...