C语言/数据结构位运算题解:异或XOR找出货币交易中的“独特面值“——只出现一次的数字

问题描述

小明最近沉迷于一个奇妙的货币交易游戏。游戏中有多种不同面值的货币,但有趣的是,除了某一种特殊货币外,每种货币都恰好有两枚相同的。小明需要快速找出那枚独一无二的货币面值,以便完成交易任务。

要求:

  1. 设计一个算法,在 O(n) 时间复杂度内找出唯一不重复的货币面值
  2. 只能使用 O(1) 的额外空间复杂度(即常数空间)
  3. 提示:考虑使用位运算的特性来优化解决方案

测试样例

样例1:

输入:coins = [5, 10, 5, 10, 20, 30, 30] 输出:20 解释:面值 5、10、30 都出现了两次,只有面值 20 出现了一次。

样例2:

输入:coins = [1, 2, 1, 2, 3, 3, 4] 输出:4 解释:面值 1、2、3 都出现了两次,只有面值 4 出现了一次。

样例3:

输入:coins = [100, 200, 100, 300, 200] 输出:300 解释:面值 100、200 都出现了两次,只有面值 300 出现了一次。

约束条件

  • 1 ≤ coins.length ≤ 1001
  • 0 ≤ coinsi ≤ 1000
  • 货币数量为奇数(保证为 2k+1 的形式)
  • 除了一个货币面值只出现一次外,其余每个面值都恰好出现两次
  • 必须使用 O(n) 时间复杂度和 O(1) 空间复杂度的算法

程序代码

#include <stdio.h>

int findUnique(int* coins, int coinsSize) {

int result = 0;

for (int i = 0; i < coinsSize; i++) {

result ^= coinsi;

}

return result;

}

int main() {

int coins1\[\] = {5, 10, 5, 10, 20, 30, 30};

int coins2\[\] = {1, 2, 1, 2, 3, 3, 4};

int coins3\[\] = {100, 200, 100, 300, 200};

printf("%d\n", findUnique(coins1, 7)); // 20

printf("%d\n", findUnique(coins2, 7)); // 4

printf("%d\n", findUnique(coins3, 5)); // 300

return 0;

}

cpp 复制代码
#include <stdio.h>

int findUnique(int* coins, int coinsSize) {
    int result = 0;
    for (int i = 0; i < coinsSize; i++) {
        result ^= coins[i];
    }
    return result;
}

int main() {
    int coins1[] = {5, 10, 5, 10, 20, 30, 30};
    int coins2[] = {1, 2, 1, 2, 3, 3, 4};
    int coins3[] = {100, 200, 100, 300, 200};
    
    printf("%d\n", findUnique(coins1, 7));  // 20
    printf("%d\n", findUnique(coins2, 7));  // 4
    printf("%d\n", findUnique(coins3, 5));  // 300
    
    return 0;
}

运行结果

相关推荐
ctlover1 小时前
数据结构:树
数据结构·python
景熙55233 小时前
14.Java 集合框架从入门到源码万字详解(含 ArrayList/LinkedList/HashMap 源码、泛型通配符、红黑树)
java·开发语言·数据结构·算法
aaaameliaaa3 小时前
结构体 结构体
c语言·笔记·算法
是隼人4 小时前
buuctf-pwn PWN8题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
SendTomo4 小时前
.ico透明图标在线生成下载平台深度解析
大数据·数据结构·数据库·数据仓库·个人开发
GG-_-Bond4 小时前
9.1kv存储持久化模拟面试
linux·c语言·数据结构·c++
程序员阿鹏4 小时前
双亲委派机制
java·jvm·数据结构·后端
runningshark5 小时前
数据结构-第二章-线性表及其顺序存储
数据结构
无敌贵点大王5 小时前
RTThread学习记录10——C语言实现面向对象的编程
c语言·stm32·学习·链表