C语言/数据结构位运算题解:异或XOR找出地铁规划中的“独特坐标“——只出现一次的数字

问题描述

小明所在的城市正在规划一条新的地铁线路,需要选择一个理想的位置建设火车站。城市中有多个居民区,每个居民区的位置用一个整数坐标表示。已知居民区的位置坐标中,除了一个坐标值只出现一次外,其余每个坐标值都恰好出现两次。规划部门希望火车站建在那个唯一坐标的居民区附近,以最大化覆盖独特区域的居民。

要求:

  1. 设计一个算法,在 O(n) 时间内找出唯一不重复的坐标位置,其中 n 是居民区的数量。
  2. 尽量减少额外空间的使用,以体现算法的空间效率。

测试样例

样例1:

输入:locations = [5, 2, 3, 2, 5, 3, 9] 输出:9 解释:坐标 5、2、3 都出现了两次,只有 9 出现一次,是唯一不重复的位置。

样例2:

输入:locations = [0, 10, 5, 10, 0] 输出:5 解释:坐标 0 和 10 都出现了两次,只有 5 出现一次。

样例3:

输入:locations = [100, 200, 100, 300, 200, 300, 500] 输出:500 解释:坐标 100、200、300 都出现了两次,只有 500 出现一次。

约束条件

  • 1 ≤ locations.length ≤ 1001
  • 0 ≤ locationsi ≤ 1000
  • 居民区数量为奇数
  • 除了一个坐标值只出现一次外,其余每个坐标值都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* locations, int locationsSize) {

int result = 0;

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

result ^= locationsi;

}

return result;

}

int main() {

int locations1\[\] = {5, 2, 3, 2, 5, 3, 9};

int locations2\[\] = {0, 10, 5, 10, 0};

int locations3\[\] = {100, 200, 100, 300, 200, 300, 500};

printf("%d\n", findUnique(locations1, 7)); // 9

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

printf("%d\n", findUnique(locations3, 7)); // 500

return 0;

}

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

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

int main() {
    int locations1[] = {5, 2, 3, 2, 5, 3, 9};
    int locations2[] = {0, 10, 5, 10, 0};
    int locations3[] = {100, 200, 100, 300, 200, 300, 500};
    
    printf("%d\n", findUnique(locations1, 7));  // 9
    printf("%d\n", findUnique(locations2, 5));  // 5
    printf("%d\n", findUnique(locations3, 7));  // 500
    
    return 0;
}

运行结果

相关推荐
春弦_8 小时前
自用算法整理二
数据结构·算法·图论
Navigator_Z10 小时前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
学逆向的11 小时前
C 多文件开发
c语言·开发语言·网络安全
学逆向的11 小时前
C 内存属性
c语言·开发语言·算法·网络安全
Zwawa11 小时前
一盏 LED 不够用了:让同一盏灯说出不同的话
c语言·单片机·嵌入式
xxxiugou12313 小时前
链表算法题精讲:从两数相加到K组翻转
数据结构·c++·算法·链表
老王IT13 小时前
C语言语法基础语法介绍
c语言·开发语言·算法
水饺编程14 小时前
第2章:Linux 基础,在 root 中创建用户账号
linux·c语言·汇编·1024程序员节
cu14314 小时前
细谈IT6563的具体功能与其应用
c语言·c++·单片机·嵌入式硬件
喜欢打篮球的普通人15 小时前
LLVM 前端与优化层:Clang 如何把 C 代码变成 IR
c语言·前端·状态模式