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;
}

运行结果

相关推荐
another heaven17 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude17 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
Zwawa21 小时前
让屏幕动起来:OLED动画效果,丝滑光标、帧动画和一只贪吃蛇
c语言·单片机·嵌入式
nice_lcj5201 天前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
꧁细听勿语情꧂1 天前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
§ꦿCFོ༉1 天前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
Pniubi1 天前
关于算法用现成数据结构和手撕
数据结构
Severus_black2 天前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
唐青枫2 天前
C 语言 strcpy() 用法详解与实战 Demo
c语言
程序猿打工仔2 天前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法