当前位置: 首页 > news >正文

力扣刷题之3158.求出出现两次数字的XOR值

题目描述

给你一个数组 nums ,数组中的数字 要么 出现一次,要么 出现两次。

请你返回数组中所有出现两次数字的按位 XOR 值,如果没有数字出现过两次,返回 0 。

示例 1:

输入:nums = [1,2,1,3]

输出:1

解释:

nums 中唯一出现过两次的数字是 1 。

示例 2:

输入:nums = [1,2,3]

输出:0

解释:

nums 中没有数字出现两次。

示例 3:

输入:nums = [1,2,2,1]

输出:3

解释:

数字 1 和 2 出现过两次。1 XOR 2 == 3 。

提示:

  • 1 <= nums.length <= 50
  • 1 <= nums[i] <= 50
  • nums 中每个数字要么出现过一次,要么出现过两次。

 题干分析

 

给定一个整数数组 nums,数组中的数字要么出现一次,要么出现两次。要求返回数组中所有出现两次的数字的按位 XOR 值。如果没有数字出现两次,返回 0。

示例:

  • 输入:nums = [1, 2, 1, 3]
    输出:1
    解释:nums 中唯一出现过两次的数字是 1

  • 输入:nums = [1, 2, 3]
    输出:0
    解释:nums 中没有数字出现两次。

  • 输入:nums = [1, 2, 2, 1]
    输出:3
    解释:数字 12 出现过两次。1 XOR 2 == 3

 解题思路

1.使用技术数组

  • 本题中需要找出所有出现两次的数字的按位XOR值。可以通过使用一个技术数组cnt来跟踪每个数字在数组中出现的次数。

2.遍历数组

  • 对数组进行遍历,记录每个数字出现的次数
  • 如果该元素已经出现一次(即cnt[nums[i]] == 1),将该元素的值与结果res进行按位XOR运算。
  • 如果该元素是第一次出现,则将其标记成出现一次。

3.最后返回结果res,即所有出现两次数字的按位XOR值。

 解题步骤

  • 初始化计数数组 cnt,大小为 MAX_NUM,用于记录每个数字的出现次数。
  • 初始化结果变量 res0
  • 遍历输入数组 nums,对每个元素进行以下操作:
    • 如果该元素已经出现过一次,则将其与结果变量 res 进行按位 XOR 运算。
    • 否则,将该元素的出现次数设置为 1
  • 返回结果变量 res,即为所有出现两次数字的按位 XOR 值。

 代码实现

#include <stdio.h>
#define MAX_NUM 64int duplicateNumbersXOR(int* nums, int numsSize) {int cnt[MAX_NUM] = {0};int res = 0;for (int i = 0; i < numsSize; ++i) {if (cnt[nums[i]] == 1) {res ^= nums[i];} else {cnt[nums[i]] = 1;}}return res;
}int main() {int nums1[] = {1, 2, 1, 3};int size1 = sizeof(nums1) / sizeof(nums1[0]);printf("%d\n", duplicateNumbersXOR(nums1, size1));  // 输出:1int nums2[] = {1, 2, 3};int size2 = sizeof(nums2) / sizeof(nums2[0]);printf("%d\n", duplicateNumbersXOR(nums2, size2));  // 输出:0int nums3[] = {1, 2, 2, 1};int size3 = sizeof(nums3) / sizeof(nums3[0]);printf("%d\n", duplicateNumbersXOR(nums3, size3));  // 输出:3return 0;
}

代码解释

  • 计数数组 cnt:定义大小为 MAX_NUM 的计数数组,用于记录每个数字的出现次数。假设输入数组中的元素都不大于 MAX_NUM
  • 结果变量 res:初始化为 0,用于存储最终的 XOR 结果。
  • 循环遍历数组:在循环中判断每个数字的出现次数,若为第二次出现,则将其与 res 进行 XOR 运算。

复杂度分析 

  • 时间复杂度O(n),其中 n 为输入数组的长度。遍历数组的时间复杂度为 O(n)
  • 空间复杂度O(1)(在 MAX_NUM 为常量的情况下)。使用了固定大小的计数数组。

http://www.mrgr.cn/news/49000.html

相关文章:

  • javaScripts 知识点一 (面试题)
  • InfluxDB持久层封装
  • 全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
  • 【藏于山中的妖怪,隐入尘烟山海】
  • 【ICESat-2(Ice, Cloud and land Elevation Satellite-2)简介】
  • 计算机毕设选题推荐【软件工程专业】
  • 【分布式微服务云原生】 选择SOAP还是RESTful API?深入探讨与实践指南
  • 【LeetCode】动态规划—95. 不同的二叉搜索树 II(附完整Python/C++代码)
  • javaweb笔记汇总
  • 华为云ECS部署DR模式的LVS
  • 【分布式微服务云原生】 探索SOAP协议:简单对象访问协议的深度解析与实践
  • windows C++-轻量级任务
  • 大模型生图安全疫苗注入赛题解析(DataWhale组队学习)
  • R语言统计分析——折线图
  • 自注意力机制self-attention中QKV矩阵的含义
  • 2025届保研-优营率0%上岸C9
  • C++面试速通宝典——24
  • 基于SpringBoot+Vue的陶怡居茶铺管理系统设计实现(协同过滤算法)
  • 实践体验密集小目标检测,以小麦麦穗颗粒为基准,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建智能精准麦穗颗粒检测计数系统
  • 231水果滑块喜+1