Bootstrap

从0开始学算法-01时间复杂度、异或运算(常见面试题)、对数器的使用

一.时间复杂度

 二.异或运算

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;
}

三.对数器

;