從一道小題引出位運算子的學習

2021-10-10 13:32:35 字數 1153 閱讀 4343

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沒有顯式宣告...