[位运算、异或] 只出现一次的数字

题目

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

分析

常规方法很容易,但是最巧妙最高效的方法应该是位运算,异或操作。

异或操作满足三个特性:

  1. 任何数和 0 做异或运算,结果都是原来的数。

  2. 任何数和自身做异或运算,结果都是 0

  3. 异或运算满足数学等式上的交换律和结合律

算法代码

public int singleNumber(int[] nums) {
    int num = nums[0];
    for (int i = 1; i < nums.length; i++) {
        int temp = nums[i];
        num ^= temp;
    }
    return num;
}

 

### 位运算异或操作的使用方法及其编程应用 #### 异或操作的基础概念 异或(XOR)是一种二元逻辑运算,其结果只有当两个比较的比特不相同时才返回1。具体来说,在位级别上,如果对应的两位相同,则结果为0;不同则为1[^1]。 #### 异或的主要用途 异或运算是计算机科学中非常重要的工具之一,广泛应用于多个领域: - **数据加密**:通过简单的异或操作可以实现基本的数据加密解密功能。 - **校验计算**:在通信协议中常用作简单而有效的错误检测机制[^2]。 - **错误检测与纠正**:利用异或特性来发现传输过程中的误码并尝试修复它们[^3]。 - **位操作优化**:某些情况下能够替代条件判断语句从而提高程序效率[^4]。 #### 实际案例分析——寻找数组中的唯一元素 下面给出一段基于Python语言的例子代码展示如何运用异或找到列表里只出现一次的那个数(其他数字均成对存在),这正是得益于异或所谓的“消消乐”性质即任何数值与其本身做异或都会得到零这一特点: ```python def find_unique_element(nums): unique = 0 for num in nums: unique ^= num # 利用了a ^ a = 0 a ^ 0 = a 的性质 return unique numbers = [4, 1, 2, 1, 2] print(find_unique_element(numbers)) # 输出应为4 ``` 上述函数`find_unique_element()`遍历整个输入序列nums,并持续更新变量unique,最终留下的就是那个独一无二的整数。 #### 另一实例—简易字符串加密/解密方案 这里还提供了一个关于怎样借助C++完成基础文本加解密的小示范: ```cpp #include <iostream> using namespace std; string encrypt_decrypt(string s){ string output = ""; char key = 'K'; // 自定义密钥 for (int i=0;i<s.length();i++) { output += s[i]^key; } return output; } int main(){ string original="HelloWorld"; cout << "Original Text: "<<original<<endl; string encrypted=encrypt_decrypt(original); cout<<"Encrypted:"<<encrypted<<endl; string decrypted=encrypt_decrypt(encrypted); cout<<"Decrypted:"<<decrypted<<endl; } ``` 在这个例子当中,我们采用字符'K'作为固定的秘钥来进行逐字节级别的加密处理,再次调用相同的函数即可恢复原始消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值