1. 程式人生 > 其它 >陣列中數字出現的次數

陣列中數字出現的次數

技術標籤:演算法c語言

一個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//異或
int ContinuousXor(int* arr, int sz)
{
	int ret = 0;
	for (int i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}
	return ret;
}
//找出出現一次的數字
void FindOnce(int* arr, int sz, int* num1, int* num2) { //先求出這個陣列連續異或後的結果tmp int tmp = ContinuousXor(arr, sz); int index = 0; int i = 0; for (i = 0; i < 32; i++) { //找出tmp為1的那一位 if ((tmp >> i) & 1 == 1) { index = i; break; } } for (i = 0; i < sz; i++) { //用第i位是否為1將陣列分為兩組分別異或
if ((arr[i] >> index) & 1 == 1) *num1 ^= arr[i]; else *num2 ^= arr[i]; } } int main() { int arr[] = { 4, 3, 3, 5, 6, 6, 7, 7 }; int num1 = 0; int num2 = 0; int sz = sizeof(arr) / sizeof(arr[0]); FindOnce(arr, sz, &num1, &num2); printf("在arr陣列中%d與%d僅出現了一次\n"
, num1, num2); return 0; }