C语言/数据结构位运算题解:异或XOR找出糖葫芦派对中的“独一无二山楂果数量“——只出现一次的数字

问题描述

班级里举办了一场糖葫芦派对,每位同学都拿到了一串糖葫芦,每串糖葫芦上插着数量不同的山楂果(用整数表示)。已知班级中除了一个同学的糖葫芦串上的山楂果数量是独一无二的外,其他所有同学的糖葫芦串上的山楂果数量都恰好出现两次(即每个数量都恰好有两位同学相同)。班长小C想要快速找出那位拿着独一无二糖葫芦串的同学,以便为他颁发"最特别糖葫芦奖"。

要求:

  1. 设计一个算法,在 O(n) 时间内找出独一无二的糖葫芦串上的山楂果数量,其中 n 是班级人数。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

测试样例

样例1:

输入:candiedFruits = [3, 5, 3, 2, 5, 4, 2] 输出:4 解释:数字 3 出现两次(索引0和2),5 出现两次(索引1和4),2 出现两次(索引3和6),只有数字 4 出现一次(索引5),因此独一无二的糖葫芦串是 4。

样例2:

输入:candiedFruits = [1, 2, 1, 2, 3, 3, 7] 输出:7 解释:数字 1 出现两次(索引0和2),2 出现两次(索引1和3),3 出现两次(索引4和5),只有数字 7 出现一次(索引6),因此独一无二的糖葫芦串是 7。

样例3:

输入:candiedFruits = [0, 0, 1, 1, 2, 2, 8, 8, 9] 输出:9 解释:数字 0 出现两次(索引0和1),1 出现两次(索引2和3),2 出现两次(索引4和5),8 出现两次(索引6和7),只有数字 9 出现一次(索引8),因此独一无二的糖葫芦串是 9。

约束条件

  • 1 ≤ candiedFruits.length ≤ 1001
  • 0 ≤ candiedFruitsi ≤ 1000
  • 班级人数为奇数(即数组长度为奇数)
  • 除了一个糖葫芦串的山楂果数量只出现一次外,其余每个数量都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* candiedFruits, int candiedFruitsSize) {

int result = 0;

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

result ^= candiedFruitsi;

}

return result;

}

int main() {

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

int test2\[\] = {1, 2, 1, 2, 3, 3, 7};

int test3\[\] = {0, 0, 1, 1, 2, 2, 8, 8, 9};

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

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

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

return 0;

}

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

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

int main() {
    int test1[] = {3, 5, 3, 2, 5, 4, 2};
    int test2[] = {1, 2, 1, 2, 3, 3, 7};
    int test3[] = {0, 0, 1, 1, 2, 2, 8, 8, 9};
    
    printf("%d\n", findUnique(test1, 7));  // 4
    printf("%d\n", findUnique(test2, 7));  // 7
    printf("%d\n", findUnique(test3, 9));  // 9
    
    return 0;
}

运行结果

相关推荐
星恒随风1 小时前
Linux进程信号(一):从Ctrl+C到kill、raise、alarm,深入理解信号的概念与产生原理
linux·c语言·笔记·学习·状态模式
学逆向的2 小时前
C 浮点数e(科学计数法)
c语言·开发语言·网络安全
知识分享小能手2 小时前
C学习教程,从入门到精通,C语言数组 —— 知识点详解(8)
c语言·学习·算法
lhbweilai2 小时前
分析FreeRTOS内核对象API的源码实现(三)
c语言·stm32·单片机
benchmark_cc2 小时前
批量获取股票数据后,如何统一转换成 DataFrame?从数据结构到量化研究的完整实践
数据结构·python·数据分析·量化交易·股票数据·quantdash
啵啵啵鱼2 小时前
第三章 栈、队列和数组相关结构
java·数据结构·栈·队列
笨鸟先飞的橘猫3 小时前
C 扩展开发指南:从 Lua 到 skynet 的完整链路
c语言·lua
xys_6783 小时前
深挖数据结构:线性表(1)
数据结构
Navigator_Z12 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode