C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字

问题描述

小M正在开发一个多任务下载器,可以同时下载多个文件。每个文件都有一个唯一的下载速度(整数),但系统显示时不小心将每个速度值都重复显示了两次(即除了一个独特的速度值外,其他每个速度值都恰好出现两次)。小M需要快速找出这个独特下载速度的文件,以便优先处理它。

要求:

  1. 设计一个算法,在 O(n) 时间内找出独特的下载速度,其中 n 是速度列表的长度。
  2. 尽量减少额外空间的使用,以优化下载器的性能。

测试样例

样例1:

输入:speeds = [5, 3, 5, 2, 3, 4, 4] 输出:2 解释:速度 2 只出现一次,是独特的下载速度,其他速度(5、3、4)都恰好出现两次。

样例2:

输入:speeds = [10, 20, 10, 30, 20, 40, 40] 输出:30 解释:速度 30 只出现一次,是独特的下载速度,其他速度(10、20、40)都恰好出现两次。

样例3:

输入:speeds = [1, 1, 2, 2, 3, 3, 4] 输出:4 解释:速度 4 只出现一次,是独特的下载速度,其他速度(1、2、3)都恰好出现两次。

样例4:

输入:speeds = [5] 输出:5 解释:列表只有一个速度值,因此 5 就是独特的下载速度。

约束条件

  • 1 ≤ speeds.length ≤ 1001
  • 0 ≤ speedsi ≤ 1000
  • 列表长度为奇数
  • 除了一个下载速度只出现一次外,其余每个下载速度都恰好出现两次

程序代码

#include <stdio.h>

int findUniqueSpeed(int* speeds, int speedsSize) {

int result = 0;

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

result ^= speedsi;

}

return result;

}

int main() {

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

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

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

int speeds4\[\] = {5};

printf("%d\n", findUniqueSpeed(speeds1, 7)); // 2

printf("%d\n", findUniqueSpeed(speeds2, 7)); // 30

printf("%d\n", findUniqueSpeed(speeds3, 7)); // 4

printf("%d\n", findUniqueSpeed(speeds4, 1)); // 5

return 0;

}

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

int findUniqueSpeed(int* speeds, int speedsSize) {
    int result = 0;
    for (int i = 0; i < speedsSize; i++) {
        result ^= speeds[i];
    }
    return result;
}

int main() {
    int speeds1[] = {5, 3, 5, 2, 3, 4, 4};
    int speeds2[] = {10, 20, 10, 30, 20, 40, 40};
    int speeds3[] = {1, 1, 2, 2, 3, 3, 4};
    int speeds4[] = {5};
    
    printf("%d\n", findUniqueSpeed(speeds1, 7));  // 2
    printf("%d\n", findUniqueSpeed(speeds2, 7));  // 30
    printf("%d\n", findUniqueSpeed(speeds3, 7));  // 4
    printf("%d\n", findUniqueSpeed(speeds4, 1));  // 5
    
    return 0;
}

运行结果

相关推荐
1-1=02 小时前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
希和20272 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
布莱克60512 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH15 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
Zwawa17 小时前
屏幕不止一种:OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,这与TTY和PTY又有什么关系
c语言·单片机·嵌入式
Fruiticecake17 小时前
C 程序员速通现代 C++(一):lambda、std::function、移动语义与智能指针
c语言·c++
田甲18 小时前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言
zh_xuan21 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
·present·1 天前
CSAPP(lecture 13_02 Linking)
c语言·c++
白杨尚青1 天前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树