C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字

问题描述

小明和小红正在玩飞行棋,他们需要将棋子按照颜色分组。有趣的是,除了一个棋子之外,所有其他颜色的棋子都恰好有两个。由于小红不小心把一个棋子混入了另一组,现在需要你帮助小明快速找出那个颜色独特的棋子是什么颜色(用数字表示颜色)。

要求:

  1. 设计一个算法,使其时间复杂度为 O(n),其中 n 是棋子的总数。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

测试样例

样例1:

输入:pieces = [1, 1, 2, 2, 3, 3, 4, 5, 5] 输出:4 解释:颜色为 4 的棋子是唯一一个没有配对的。

样例2:

输入:pieces = [0, 1, 0, 1, 2] 输出:2 解释:颜色 2 的棋子只出现一次,是独特的颜色。

样例3:

输入:pieces = [7, 3, 3, 7, 10] 输出:10 解释:颜色 10 的棋子是唯一一个不重复的棋子颜色。

约束条件

  • 1 ≤ pieces.length ≤ 1001
  • 0 ≤ piecesi ≤ 1000
  • 棋子总数为奇数
  • 除了一个颜色的棋子只出现一次外,其余每个颜色的棋子都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* pieces, int piecesSize) {

int result = 0;

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

result ^= piecesi;

}

return result;

}

int main() {

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

int pieces2\[\] = {0, 1, 0, 1, 2};

int pieces3\[\] = {7, 3, 3, 7, 10};

printf("%d\n", findUnique(pieces1, 9)); // 4

printf("%d\n", findUnique(pieces2, 5)); // 2

printf("%d\n", findUnique(pieces3, 5)); // 10

return 0;

}

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

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

int main() {
    int pieces1[] = {1, 1, 2, 2, 3, 3, 4, 5, 5};
    int pieces2[] = {0, 1, 0, 1, 2};
    int pieces3[] = {7, 3, 3, 7, 10};
    
    printf("%d\n", findUnique(pieces1, 9));  // 4
    printf("%d\n", findUnique(pieces2, 5));  // 2
    printf("%d\n", findUnique(pieces3, 5));  // 10
    
    return 0;
}

运行结果

相关推荐
爱吃苹果的日记本1 小时前
数据结构第三课(时间复杂度)
数据结构·学习
Logic1013 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
小π军4 小时前
最大重叠区间数量
数据结构·算法
Logic1015 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
Navigator_Z5 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
是隼人5 小时前
buuctf-pwn picoctf_2018_shellcode(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
wzdark6 小时前
基于链表的内存池设计与内存复用机制4
java·数据结构·链表
潜创微科技6 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
白色的北极熊7 小时前
字符转 ASCII 码
c语言