C语言/数据结构位运算题解:异或XOR找出数轴移动中只出现一次的指令——只出现一次的数字

问题描述

小A在玩一个有趣的游戏,他站在数轴的原点(位置0)上,手里有一串移动指令。每个指令是一个整数,表示小A需要向左(负数)或向右(正数)移动的步数。但是小A发现,当他按顺序执行所有指令后,竟然神奇地回到了原点!原来,除了一个指令只出现了一次外,其他所有指令都恰好出现了两次(即每个指令在数组中出现两次)。现在需要你帮助小A找出那个只出现了一次的指令。

要求:

  1. 设计一个算法,在O(n)时间内找出只出现一次的指令。
  2. 尽量减少额外空间的使用,以体现算法优化能力。

测试样例

样例1:

输入:moves = [1, -1, 2, -2, 3, -3, 4, -4, 5] 输出:5 解释:指令5只出现一次,其他指令都成对出现(各出现两次)。执行所有指令后的净位移为:1 + (-1) + 2 + (-2) + 3 + (-3) + 4 + (-4) + 5 = 0 + 5 = 5,正好等于只出现一次的指令5的值。

样例2:

输入:moves = [0, 1, 0, 1, -2] 输出:-2 解释:指令-2只出现一次,其他指令都成对出现(各出现两次)。执行所有指令后的净位移为:0 + 1 + 0 + 1 + (-2) = 0 + (-2) = -2,正好等于只出现一次的指令-2的值。

样例3:

输入:moves = [3, -3, 7, -7, 10] 输出:10 解释:指令10只出现一次,其他指令都成对出现(各出现两次)。执行所有指令后的净位移为:3 + (-3) + 7 + (-7) + 10 = 0 + 10 = 10,正好等于只出现一次的指令10的值。

约束条件

  • 1 ≤ moves.length ≤ 1001
  • -1000 ≤ movesi ≤ 1000
  • 指令序列长度为奇数
  • 除了一个指令只出现一次外,其余每个指令都恰好出现两次
  • 初始位置为0,执行所有指令后位置等于只出现一次的那个指令的值

程序代码

#include <stdio.h>

int findUniqueMove(int* moves, int movesSize) {

int result = 0;

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

result ^= movesi;

}

return result;

}

int main() {

// 样例1:使用修正后的数据

int moves1\[\] = {1, 1, 2, 2, 3, 3, 4, 4, 5};

int moves2\[\] = {0, 1, 0, 1, -2};

int moves3\[\] = {3, -3, 7, -7, 10};

printf("%d\n", findUniqueMove(moves1, 9)); // 5

printf("%d\n", findUniqueMove(moves2, 5)); // -2

printf("%d\n", findUniqueMove(moves3, 5)); // 10

return 0;

}

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

int findUniqueMove(int* moves, int movesSize) {
    int result = 0;
    for (int i = 0; i < movesSize; i++) {
        result ^= moves[i];
    }
    return result;
}

int main() {
    // 样例1:使用修正后的数据
    int moves1[] = {1, 1, 2, 2, 3, 3, 4, 4, 5};
    int moves2[] = {0, 1, 0, 1, -2};
    int moves3[] = {3, -3, 7, -7, 10};
    
    printf("%d\n", findUniqueMove(moves1, 9));  // 5
    printf("%d\n", findUniqueMove(moves2, 5));  // -2
    printf("%d\n", findUniqueMove(moves3, 5));  // 10
    
    return 0;
}

运行结果

相关推荐
重生之小比特1 小时前
【算法拾光】双指针|移动零 + 复写零
数据结构·c++·算法
weixin_462901971 小时前
CubeIDE串口重定向 printf
c语言
人邮异步社区2 小时前
C语言好学,还是Python好学?
c语言·开发语言·python
动词ing4 小时前
[题目练习】三数之和
数据结构
YSL0701244 小时前
一文通关-----栈和队列
开发语言·数据结构
水饺编程4 小时前
第2章:Linux 基础,echo 命令
linux·c语言·汇编
垆边人似月.4 小时前
找出最小的 K 个数
数据结构·c++·算法
晓蛋5 小时前
C语言中定义常量为什么要加后缀
c语言·溢出·常量定义·后缀·类型限定
Logic1015 小时前
C语言/数据结构贡献法题解:数组权值——所有连续子数组中不同数字个数之和(O(n)解法)
c语言·数据结构·算法·数组·时间复杂度·贡献法·哈希记录