云计算百科
云计算领域专业知识百科平台

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

问题描述

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

要求:

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

    样例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 ≤ ships[i] ≤ 1000
    • ships.length 是奇数
    • 除了某一艘货船的载货量只出现一次外,其余每种载货量都恰好出现两次

    程序代码

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

    }

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

    运行结果

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » C语言/数据结构位运算题解:异或XOR找出货船中的“独特载货量“——只出现一次的数字
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!