C语言/数据结构位运算题解:异或XOR找出货船中的“独特载货量“——只出现一次的数字

问题描述

小S是一位国际货船租赁商,他最近接手了一批特殊的货船订单。每艘货船都有一个载货量数值,但奇怪的是,除了某一艘货船之外,其他每种载货量都恰好出现两次。小S需要快速找出那艘载货量独特的货船,以便为它安排特殊的航线。

要求:

  1. 设计一个算法,在 O(n) 的时间复杂度内找出独特的载货量数值,其中 n 是货船的数量。
  2. 尽量减少额外空间的使用,以优化资源效率。

测试样例

样例1:

输入:ships = [50, 20, 20, 30, 30, 40, 40, 50, 60] 输出:60 解释:载货量 60 的货船只出现一次,是独特的;其他载货量(50、20、30、40)都恰好出现两次。

样例2:

输入:ships = [100, 200, 100, 200, 150] 输出:150 解释:载货量 150 的货船只出现一次,是独特的;其他载货量(100、200)都恰好出现两次。

样例3:

输入:ships = [500, 300, 500, 300, 700, 700, 800] 输出:800 解释:载货量 800 的货船只出现一次,是独特的;其他载货量(500、300、700)都恰好出现两次。

约束条件

  • 1 ≤ ships.length ≤ 1001
  • 0 ≤ shipsi ≤ 1000
  • ships.length 是奇数
  • 除了某一艘货船的载货量只出现一次外,其余每种载货量都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* ships, int shipsSize) {

int result = 0;

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

result ^= shipsi;

}

return result;

}

int main() {

int ships1\[\] = {50, 20, 20, 30, 30, 40, 40, 50, 60};

int ships2\[\] = {100, 200, 100, 200, 150};

int ships3\[\] = {500, 300, 500, 300, 700, 700, 800};

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

printf("%d\n", findUnique(ships2, 5)); // 150

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

return 0;

}

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

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

int main() {
    int ships1[] = {50, 20, 20, 30, 30, 40, 40, 50, 60};
    int ships2[] = {100, 200, 100, 200, 150};
    int ships3[] = {500, 300, 500, 300, 700, 700, 800};
    
    printf("%d\n", findUnique(ships1, 9));  // 60
    printf("%d\n", findUnique(ships2, 5));  // 150
    printf("%d\n", findUnique(ships3, 7));  // 800
    
    return 0;
}

运行结果

相关推荐
BK贝壳5 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
学逆向的5 小时前
C 枚举变量
c语言·开发语言·网络安全
冷凝雨6 小时前
前导零、后导零、最高有效位、最低有效位计算(C)
c语言
鸥梨菌Honevid6 小时前
C 语言 restrict 关键字深度解析:从“独占访问”承诺到编译器激进优化
c语言
?abc!8 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
水饺编程11 小时前
第2章:Linux 基础,切换用户
linux·c语言·汇编
知识分享小能手12 小时前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
爱读书的小胖12 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
pipixia2003313 小时前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
舰长11513 小时前
将百万数据插入到 Redis,有哪些实现方案?
数据结构·redis·开源