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

运行结果

相关推荐
§ꦿCFོ༉17 小时前
嵌入式八股—C语言入门学习(一)
c语言·编程语言·嵌入式八股文
沐晓时光19 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
智者知已应修善业1 天前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
老师我太想进步了20261 天前
【数据结构-3】算法美学之降复杂度
数据结构·算法
布莱克6051 天前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
揽星河..2 天前
【C语言】底层程序设计
c语言·开发语言
w_zero_one2 天前
算法--构造
java·数据结构·算法
揽星河..2 天前
【C语言】结构体
c语言·开发语言
唐青枫2 天前
C 语言 malloc() 详解与实战 Demo
c语言
lisw052 天前
互联网上的数据结构可视化!
数据结构·信息可视化