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

运行结果

相关推荐
殷色玫瑰12 分钟前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
C++ 老炮儿的技术栈23 分钟前
不一样的数值交换
数据结构·c++·人工智能·算法·c·csdn开发云
C++ 老炮儿的技术栈32 分钟前
main函数之后的调用
c语言·c++·人工智能·qt·mfc·c
青山木1 小时前
Hot 100 --- 编辑距离
java·数据结构·算法·leetcode·动态规划
小师兄吃牛肉2 小时前
C语言指针进阶全解析
java·c语言·算法
梦帮科技2 小时前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
大侠归来4 小时前
C语言素数判断:从入门到进阶
java·c语言·算法
H.莓飛4 小时前
【数据结构】链表_OJ题
linux·数据结构·算法·链表
All for pursuit.4 小时前
【回溯-4】46.全排列
数据结构·c++·算法·leetcode
大圣编蚕5 小时前
C语言核心知识复习:预处理、头文件、强制类型转换、错误处理、递归与内存管理
c语言·开发语言