C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字

问题描述

小C今天带来了一堆美味的果子到班级分享,每个果子都有一个编号。同学们依次挑选果子,有趣的是,除了一个编号的果子之外,其他编号的果子都被挑选了恰好两次。小C想快速找出那个被挑选了奇数次的果子编号(也就是只被挑走一次的果子),以便确认剩下的果子是否分配均匀。

要求:

  1. 设计一个算法,在 O(n) 的时间复杂度内找出只出现一次的编号,其中 n 是挑选次数总数(即数组长度)。
  2. 尽量减少额外空间的使用,以体现算法的优化能力。

测试样例

样例1:

输入:fruits = [5, 2, 3, 2, 5, 3, 7] 输出:7 解释:编号 5、2、3 都出现了两次,只有编号 7 出现了一次。

样例2:

输入:fruits = [10, 10, 20, 30, 30] 输出:20 解释:编号 10 和 30 都出现了两次,只有编号 20 出现了一次。

样例3:

输入:fruits = [1, 1, 2, 2, 3, 3, 4, 4, 99] 输出:99 解释:编号 1、2、3、4 都出现了两次,只有编号 99 出现了一次。

约束条件

  • 1 ≤ fruits.length ≤ 1001(且数组长度必为奇数)
  • 0 ≤ fruitsi ≤ 1000
  • 除了一个编号只出现一次外,其余每个编号都恰好出现两次

程序代码

#include <stdio.h>

int findUniqueFruit(int* fruits, int fruitsSize) {

int result = 0;

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

result ^= fruitsi;

}

return result;

}

int main() {

int fruits1\[\] = {5, 2, 3, 2, 5, 3, 7};

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

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

printf("%d\n", findUniqueFruit(fruits1, 7)); // 7

printf("%d\n", findUniqueFruit(fruits2, 5)); // 20

printf("%d\n", findUniqueFruit(fruits3, 9)); // 99

return 0;

}

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

int findUniqueFruit(int* fruits, int fruitsSize) {
    int result = 0;
    for (int i = 0; i < fruitsSize; i++) {
        result ^= fruits[i];
    }
    return result;
}

int main() {
    int fruits1[] = {5, 2, 3, 2, 5, 3, 7};
    int fruits2[] = {10, 10, 20, 30, 30};
    int fruits3[] = {1, 1, 2, 2, 3, 3, 4, 4, 99};
    
    printf("%d\n", findUniqueFruit(fruits1, 7));  // 7
    printf("%d\n", findUniqueFruit(fruits2, 5));  // 20
    printf("%d\n", findUniqueFruit(fruits3, 9));  // 99
    
    return 0;
}

运行结果

相关推荐
LabVIEW开发1 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
严肃小白兔3 小时前
MATLAB 数值计算中的精度与误差问题:浮点运算、误差传播与数值稳定性
人工智能·算法·matlab
Hhy_11073 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
青少儿编程课堂4 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan5 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
曦樂~15 小时前
Cpp面筋
c语言·c++
Dream it possible!18 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊18 小时前
算法之双指针系列(一)
算法·leetcode
十二18 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方19 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划