給定一個整數數組ar, 其中只有一個數出現了奇數次數,其他的數都是偶數詞,打印這個數。


       看到這個題目的時候,第一反應是想辦法建設一個映射,把每個數字與出現的次數count結合起來,每出現一次進行count+1,最后遍歷出count不是偶數的那個數就是所求數。

但剛有這個想法便覺得這個實現起來有點復雜了,有沒有更簡單的方法,然后就想到了排序,直接用 sort( ) 進行排序,兩個數兩個數的來讀,判斷所讀的兩個數是否相等,相等則繼續下一組,不相等則這個數就是所求數

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int arr[]={4,3,5,6,8,7,9,1,11,3,4,5,6,7,8,9,1};
	int n=sizeof(arr)/sizeof(arr[0]);
	int i;
	sort(arr,arr+n);
	for(i=0;i<n;i+=2)
	{
		if(arr[i]!=arr[i+1])
		{	
			cout<<arr[i]<<endl;
			break;
		}
	}
     return 0; }

  

后來上網看,又看到了一個更簡單的方法,直接用異或運算符來進行計算,相同的數字異或為0,0異或任何數都等於任何數,且異或的位置可以進行交換而不影響結果,

如:3^4^5^3^5=3^3^5^5^4 =4。

#include<iostream>
using namespace std;
int main()
{
	int arr[]={4,3,5,6,8,7,9,1,123,3,4,5,6,7,8,9,1};
	int n=sizeof(arr)/sizeof(arr[0]);
	int a=arr[0];
	while(--n)
		a^=arr[n];    
	cout<<a<<endl;
        return0;
}

  阿西吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM