您的位置:首页 > 汽车 > 新车 > 昆明最新消息今天_手机上怎么注册公司营业执照_sem是什么电镜_谷歌搜索优化seo

昆明最新消息今天_手机上怎么注册公司营业执照_sem是什么电镜_谷歌搜索优化seo

2024/10/19 14:38:01 来源:https://blog.csdn.net/m0_75213259/article/details/142888563  浏览:    关键词:昆明最新消息今天_手机上怎么注册公司营业执照_sem是什么电镜_谷歌搜索优化seo
昆明最新消息今天_手机上怎么注册公司营业执照_sem是什么电镜_谷歌搜索优化seo

题目描述

给你一个数组 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 为常量的情况下)。使用了固定大小的计数数组。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com