(異或運算的使用)不使用臨時變數交換倆個元素的值

2021-09-24 02:37:00 字數 777 閱讀 1053

我們使用的運算是 異或運算。(簡稱為:不進製的加法運算)

首先我們假設a = 001 b = 010那麼我們給a賦值

a = a ^ b = 011;

此時我們接著進行 a ^ b 計算結果賦值給b

b = a ^ b = 001;

接著進行 a ^ b 計算結果賦值給a 

a = a ^ b = 010;

這樣我們便沒有使用任何變數交換了來個變數的值。

void swap(int *a ,int *b)

至此我們沒有使用任何的中間變數便交換了倆個變數的值。

我們可以使用異或運算來達到目的,因為問題的前提是陣列內只含有乙個不與其他元素重複的元素,那麼我們便可以利用異或運算的特點來解決此問題。因為相同的元素經過異或運算的結果是0,那麼我們便利陣列內所有的元素,它們進行異或運算,最終得出的結果便是那個唯一不與其他元素重複的元素。

#include int main()

; int i = 0;

int n = sizeof(arr)/sizeof(arr[0]);

int result = 0;

for(i=0;i列印的結果是result : 4;

使用這種方法的時間複雜度為o(n);

免去了陣列內的元素的倆倆比較的過程,一定程度上降低了時間複雜度。

不使用臨時變數交換兩個變數的值(異或,加減,乘除)

一般我們交換兩個變數的值的時候,一般會用到乙個輔助變數,像這樣 int temp a a b b temp 當然,也有一些指令碼語言如python,lua只需要一行 就搞定 a,b b,a除了使用輔助變數之外,我們還可以通過其他方法來達到交換的目的。異或有一些有趣的用法,比如這裡有用異或的性質求出陣...

使用異或運算 不借助臨時變數交換兩個數

通常交換兩個變數需借助乙個臨時變數,如 int temp temp a a b b temp 使用異或可以不借助臨時變數交換兩個數 a a b b a b a a b 這是用了異或的自反性性質做到的 a b b a 0 a 具體推導過程 第一步 a a b 第二步 b a b a b b a 經過第...

使用異或運算的小難題

乙個陣列中有兩種數出現了奇數次,其他數都出現了偶數次,怎麼找到這兩個數。因為可能有很多的數,所以不能開陣列,就使用到了異或的運算,我還沒有很懂就直接看 吧。乙個陣列中有兩種數出現了奇數次,其他數都出現了偶數次,怎麼找到這兩個數 include using namespace std int main...