找單數
版權宣告:本文為博主原創文章,轉載請註明出處。
個人部落格地址:ofollow,noindex">https://yangyuanlin.club
歡迎來踩~~~~
- single number
Given an array of integers, every element appearstwice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
- 題目大意:給一個數組,陣列中只有一個數是單獨出現的,別的數都是成對出現的,找出這個單獨出現的數。特別提示:你的演算法應該具有線性的運行復雜度,而且不要用額外的記憶體。
- 思路:如果沒有特別提示的話,是很好做的:從第一個數找起,記錄下標,找到跟它相等的,就把兩個數都置為0(假設整數中沒有0),最後陣列中沒有置為0的數就是要找的那個單數。但是有了這個特別提示,就要想別的辦法,最後的辦法是用位運算,具體是用異或運算。
- 異或的運演算法則:(1)異或滿足交換律; (2)相同兩個數異或為0;(3)0異或一個數為那個數本身。
- 程式碼:
#include<iostream> using namespace std; int singleNumber(int A[], int n) { int num = 0; for(int i = 0; i < n; i++) { num ^= A[i]; } return num; } int main() { int A[] = {1, 1, 2, 2, 3, 3, 4}; cout<<singleNumber(A, 7)<<endl; return 0; }
- 以上。
版權宣告:本文為博主原創文章,轉載請註明出處。
個人部落格地址:https://yangyuanlin.club
歡迎來踩~~~~