C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字

问题描述

小明和小红是两位热爱学习的同学,他们决定利用暑假时间学习新技能。他们列出了 n 个技能,每个技能有一个学习时间(单位:小时)。有趣的是,除了一个技能外,所有技能的学习时间都恰好出现了两次,这意味着有两个技能需要相同的时间完成。只有一个技能的学习时间是独一无二的。

现在,他们需要找出那个独特学习时间的技能,以便合理规划学习计划。请你设计一个算法,帮助他们在 O(n) 时间内找到这个独特学习时间的技能,同时尽量减少额外空间的使用。

要求:

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

测试样例

样例1:

输入:times = [5, 10, 5, 10, 15, 20, 20] 输出:15 解释:学习时间 15 小时的技能是唯一没有配对的。

样例2:

输入:times = [0, 2, 0, 2, 1] 输出:1 解释:学习时间 1 小时的技能只出现一次,是独特的。

样例3:

输入:times = [3, 8, 3, 8, 12] 输出:12 解释:12 是技能列表中唯一一个不重复的学习时间。

约束条件

  • 1 ≤ times.length ≤ 1001
  • 0 ≤ timesi ≤ 1000
  • 技能数量为奇数
  • 除了一个技能的学习时间只出现一次外,其余每个学习时间都恰好出现两次

程序代码

#include <stdio.h>

int findUniqueTime(int* times, int timesSize) {

int result = 0;

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

result ^= timesi;

}

return result;

}

int main() {

int times1\[\] = {5, 10, 5, 10, 15, 20, 20};

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

int times3\[\] = {3, 8, 3, 8, 12};

printf("%d\n", findUniqueTime(times1, 7)); // 15

printf("%d\n", findUniqueTime(times2, 5)); // 1

printf("%d\n", findUniqueTime(times3, 5)); // 12

return 0;

}

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

int findUniqueTime(int* times, int timesSize) {
    int result = 0;
    for (int i = 0; i < timesSize; i++) {
        result ^= times[i];
    }
    return result;
}

int main() {
    int times1[] = {5, 10, 5, 10, 15, 20, 20};
    int times2[] = {0, 2, 0, 2, 1};
    int times3[] = {3, 8, 3, 8, 12};
    
    printf("%d\n", findUniqueTime(times1, 7));  // 15
    printf("%d\n", findUniqueTime(times2, 5));  // 1
    printf("%d\n", findUniqueTime(times3, 5));  // 12
    
    return 0;
}

运行结果

相关推荐
凤凰院凶涛QAQ3 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛3 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
w_zero_one5 小时前
算法--模拟
java·数据结构·算法
·present·6 小时前
CSAPP(lecture 4_01)
c语言·c++
本地化文档10 小时前
llvm-libc-docs-l10n
c语言·github·gitcode·sphinx·llvm·crowdin
fish_zzzz10 小时前
笔记-论数据结构1
数据结构
Felven11 小时前
B. Collecting Game
c语言
Felven11 小时前
C. Removing Smallest Multiples
c语言·开发语言
水饺编程13 小时前
第2章:Linux 基础,重启命令
linux·c语言·汇编
傅科摆 _ py13 小时前
链表力扣复习
数据结构·leetcode·链表