一.时间复杂度
二.异或运算
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;
}