leetcode:只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
直接挨個查時間複雜度就高了,不過我還是寫一下,
public
intsinglenumber
(int
nums)
for(
int i=
0;i)else
if(i==nums.length-1)
else
if(nums[i]
!=nums[i+1]
&& nums[i]
!=nums[i-1]
)}return0;
}
用雜湊表也能做,但是空間上就不符合了。
真正的解法:
由題,其他元素的出現都是成對出現的,所以說,當那個只出現一次的數和出現兩次的數進行異或操作,得到的結果就是那個只出現一次的數。按著這個思路來寫
public
intsinglenumber
(int
nums)
int ans=nums[0]
;for
(int i=
1;i)return ans;
}
再回顧下數字邏輯學過的位運算子:
位邏輯運算子
位邏輯運算子包含 4 個:&(與)、|(或)、~(非)和 ^(異或)。除了 ~(即位取反)為單目運算子外,其餘都為雙目運算子。列出它們的基本用法。
運算子 含義 例項 結果
& 按位進行與運算(and) 4 & 5 4
| 按位進行或運算(or) 4 | 5 5
^ 按位進行異或運算(xor) 4 ^ 5 1
~ 按位進行取反運算(not) ~ 4 -5
MATLAB從一道題引出幾個重要簡單函式
還是那位同學,還是那次考試,另一道題在做的過程解決了我好幾個想用又不知道的簡單函式 怪我沒認真聽課。原題如圖 這裡不難知道,問題在於點 生成指定範圍與數目隨機數組 矩陣 資料用兩種圖表示 操作過程中的一些細節 我的 如下 clear all clear all a ceil rand 3,10 10...
從一道面試看自增運算
include include define adds a a a int main void int i 3,j j adds i printf d n j j adds i printf d n j getchar return 0 輸出為 9 49 c語言對於這種執行的處理不是把i 或 i乙個...
一道關於c 拷貝構造與 運算子的題目
這樣一段 輸出結果是 a b b a a 分析如下 1.a a 構造乙個物件a,呼叫a類的無參建構函式,輸出a 2.b b a 執行到建構函式初始化列表 b a a a a 相當於直接呼叫拷貝建構函式來初始化 ps 當乙個物件需要通過另外乙個物件進行初始化時,會呼叫拷貝構造,但是由於類a沒有顯式宣告...