一.时间复杂度
二.异或运算
3)不用额外变量交换两个数:
//交换a与b的值, 假设a=甲,b=乙
a=a^b; //a=甲^乙,b=乙
b=a^b; //a=甲^乙,b=甲^乙^乙=甲
a=a^b; //a=甲^乙^甲=乙,b=甲
(能用以上方法交换值的前提:a和b在内存中是两块独立的区域,若是a和b是同样的一块区域,这两个值将会被抹成0)
4)一个数组中,仅有一个数出现奇数次,其他数均出现了偶数次,要怎么找出出现奇数次的数;
int eor=0;
for(int i=0;i<a.length;i++){eor=eor^a[i];
}
return eor;
5)一个数组中,仅有两个数出现奇数次,其他数均出现了偶数次,要怎么找出出现奇数次的两个数;
#include <stdio.h>int main()
{int arr[6]; // 定义一个长度为6的数组printf("请输入6个整数:\n");for (int i = 0; i < 6; i++) {scanf("%d", &arr[i]); // 依次输入6个整数}int eor = 0;for (int j = 0; j < 6; j++) {eor = eor ^ arr[j];}int e = eor & (-eor); int onlyone = 0;for (int k = 0; k < 6; k++) {if ((arr[k] & e) == 0)onlyone ^= arr[k];}// 打印只出现一次的数字printf("只出现一次的数字是: %d\n", onlyone);printf("只出现一次的数字是: %d\n", onlyone^eor);return 0;
}