唯一成對的數(異或的作用)

2021-09-05 12:11:27 字數 1413 閱讀 8986

問題描述如下

1-1000這1000個數放在含有1001個元素的陣列中,只有唯一的乙個元素重複**,**其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來;不用輔助儲存空間,能否設計乙個演算法實現?

三個主要的要求: ① 只存在唯一的乙個元素重複 ② 只能訪問一次 ③ 不允許使用輔助儲存空間

藍橋杯備戰資料《演算法之美》 chapter1——位運算

這是課程展示出來的第乙個題目,還真是把我難到了…

要是可以開輔助空間的話,直接暴力掃一遍就可以了。

however, 現在不可以開輔助空間,而且還只能訪問一次,雙重迴圈判斷的方法也不行。

最後看到了題解,用到位運算中的異或 ^,體現出了異或的另外乙個作用,消除重複的元素

這裡的**只是列舉了10個元素的情況,1000個元素只要稍微改一下就可以了, n個元素同理。

如果這個題目沒有限定1-1000的範圍的話就不能用這個方法來做了,只能通過開通輔助空間來掃了。

// 異或的作用:消除重複!

#include

#include

#include

using namespace std;

int arr[10]

;void

swap

(int

&a,int

&b)int

main()

arr[9]

=rand()

%9+1

;// 1~9之間的隨機數

int index =

rand()

%9;// 0~8之間的隨機位置

swap

(arr[index]

, arr[9]

);// 交換

for(

int i =

0; i <

10; i++

) cout << endl;

// 以上均為準備工作

// 重點在下面

int x1 =0;

for(

int i =

1; i <=

9; i++

)for

(int i =

0; i <

10; i++

) cout << x1 << endl;

return0;

}

【end】感謝**

找出唯一成對的數(異或運算)

1 1000這一千個數放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其他均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助儲存空間,能否設計乙個演算法實現?解題思路 由於每個元素只能訪問一次,所以不能使用雙重for迴圈暴力求解,不能使用輔助空間所以也不能使用木桶...

唯一成對的數 演算法很美

問題 1 1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現一次。每個陣列元素只能訪問一次,設計乙個演算法,將它找出來 不用輔助儲存空間,能否設計乙個演算法實現?解法一 顯然已經有人提出了乙個比較精彩的解法,將所有數加起來,減去1 2 1000的和。這個演算法已經足夠完美...

題1 找出唯一成對的數

1 1000這1000個數放在含有1001個元素的陣列t中,只有唯一的元素值重複,其他均只出現一次,每個陣列元素只能訪問一次,請設計乙個演算法,將重複的元素找出來,不用輔助儲存空間.一般思路 過程 建立乙個長度為n 1的arr陣列 對t陣列進行遍歷 arr t i 對arr遍歷,出現2則返回當前元素...