阅读背景:

一个数组,有一个数出现3次,其余出现2次,求出现3次的数,要求时间复杂度

来源:互联网 
/**
 * 一个数组,有一个数出现3次,其余出现2次,求出现3次的数,要求时间复杂度<nlogn,空间复杂度O(1)
 * @author Administrator
 *
 */
public class FindSpecialNumInArray {

	/**
	 * 一个数与自身异或结果为0;0与任何数异或结果不变;由此可知,出现两次的数异或后结果为0,出现3次的数,
	 * 异或后结果为该数,因此将数组所有的数进行异或,最后剩下的数就是出现3次的数,时间复杂度为o(n),
	 * 空间复杂度为O(1);此方法可以再出现偶数个数与奇数个数数组中找到出现奇数个的数;
	 * @param arr[]
	 * @return
	 */
	public int findSpecialNum(int[] arr){
		int temp = 0;
		for(int i=0;i<arr.length;i++){
			temp ^= arr[i];
		}
		return temp;
	}
}
/**
 * 一个数组,有一个数出现3次,其余出现2次,求出现3次的数,要求时间复杂度<



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: