2024-12-28:求出出现两次数字的 XOR 值。用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次。 请找出所有出现两次的数字,并计算它们的按位 XOR 值。 如果没
2024-12-28:求出出现两次数字的 XOR 值。用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次。
请找出所有出现两次的数字,并计算它们的按位 XOR 值。
如果没有数字出现两次,则返回 0。
1 <= nums.length <= 50。
1 <= nums[i] <= 50。
nums 中每个数字要么出现过一次,要么出现过两次。
输入:nums = [1,2,2,1]。
输出:3。
解释:
数字 1 和 2 出现过两次。1 XOR 2 == 3 。
答案2024-12-28:
题目来自leetcode3158。
大体步骤如下:
1.初始化变量:
1.1.set: 用于记录在数组中出现的数字的集合,以位掩码的方式表示。
1.2.setXor: 用于存储出现两次的数字的按位异或结果。
1.3.totalXor: 用于存储整个数组所有数字的按位异或结果。
2.遍历输入数组:
2.1.对于数组 nums 中的每个数字 num:
2.1.1.通过 totalXor 计算当前 num 的异或值。由于异或操作具有可逆性,相同的数字进行异或会抵消,因此在最后得到的 totalXor 将是所有数字的异或结果。
2.1.2.判断 set 中是否已经存在 num:
2.1.2.1.如果 set 中不包含 num(即 set 的第 num 位是 0),则需要将其加入 set,并在 setXor 中进行异或操作,这样 setXor 会记录下当前 num。
2.1.2.2.更新 set: 将 set 与 1 << num 进行按位或操作,表示 num 这个数字在集合中已经被记录过。
3.计算出现两次的数字的 XOR 值:
3.1.最终将 setXor 和 totalXor 进行异或操作以获取只在 nums 中出现两次的数字的异或值。这是因为 totalXor 中会包含重复的数字,而 setXor 中的数字在此之前已经异或了,最后得到的结果正好是出现两次的数字的异或。
4.返回结果:
4.1.如果没有数字出现两次,最后会返回 0。
4.2.返回 setXor ^ totalXor 值,即为所有出现两次数字的按位 XOR 值。
总结
时间复杂度:这个程序的时间复杂度是 O(n),其中 n 是数组
nums的长度。因为我们只需遍历数组一次,所有的操作(异或、位操作)都是 O(1) 的常数时间复杂度。空间复杂度:总的额外空间复杂度是 O(1)。虽然我们使用了固定数量的变量(
set,setXor,totalXor),但这些变量的空间需求是常量级别,不受输入大小影响。因此空间复杂度可以认为是 O(1)。
Go完整代码如下:
package main
import "fmt"
func duplicateNumbersXOR(nums []int) int {
set:=0
setXor:=0
totalXor:=0
for _, num := range nums {
totalXor^=num
if set&(1<<num)==0{
setXor^=num
}
set|=1<<num
}
return setXor^totalXor
}
func main() {
// 示例输入
nums := []int{1, 2, 2, 1}
result := duplicateNumbersXOR(nums)
fmt.Println(result) // 输出: 3
}

Rust完整代码如下:
fn duplicate_numbers_xor(nums: &[i64]) -> i64 {
let mut set = 0;
let mut set_xor = 0;
let mut total_xor = 0;
for &num in nums {
total_xor ^= num;
if (set & (1 << num)) == 0 {
set_xor ^= num;
}
set |= 1 << num;
}
set_xor ^ total_xor
}
fn main() {
// 示例输入
let nums = vec![1, 2, 2, 1];
let result = duplicate_numbers_xor(&nums);
println!("{}", result); // 输出: 3
}

2024-12-28:求出出现两次数字的 XOR 值。用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次。 请找出所有出现两次的数字,并计算它们的按位 XOR 值。 如果没的更多相关文章
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...
- [PHP] 算法-请找出带环链表的环的入口结点的PHP实现
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...
- 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
package algorithms; /* 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. public class ListNode { int val; ListNo ...
- 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...
- 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2.3.2,2.2.5,4.2}, 因为数组中数字2出现了5次,超过数组的长度的一半,因此输出2 ...
- 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序
题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...
- 一个很大的文件,存放了10G个整数的乱序数列,如何用程序找出中位数。
一.梳理审题 一.看清题目: 注意这个题目的量词,这个文件中有10G个整数,而不是这个文件占了10G的内存空间. 二.一些疑问: 在计算机中我们讲的G.M等都是存储容量的概念,但是一般都会在会面加上B ...
- 给定一个数组,求如果排序后,相邻两个元素的最大差值,要求时间复杂度为O(N)
第一种方法: 计数排序后,然后找出两两之间的最大差值 计数排序的时间复杂度是O(N) public class CountSort { public static void main(String[] ...
- 一个数组nums,其中任意两个值等于给定值target,返回这两个值在nums里的位置
package com.java.tencent; import java.lang.reflect.Array; import java.util.Arrays; import java.util. ...
随机推荐
- sqlplus登录脚本glogin.sql的配置
DEFINE sqlprompt=SQL COLUMN sqlprompt NEW_VALUE sqlprompt SET TERMOUT OFF SELECT USER || '@' || NVL( ...
- KubeSphere 部署向量数据库 Milvus 实战指南
作者:运维有术星主 Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库.它以卓越的性能和灵活性,提供了一个强大的平台,用于存储.搜索和管理大规模的向量数据.Milvus 能够执 ...
- vue axios的使用及操作
引入axios 并设置原型 Vue.prototype.$axios = axios; 在其他地方就可以this.$axios使用了 let param = _this.$qs.string ...
- 关于sizeof、strlen的理解与辨析以及strlen的模拟实现
关于sizeof.strlen的理解与辨析以及strlen的模拟实现 1. sizeof() sizeof的作用: 计算变量所占内存内存空间大小,单位是字节. 注意事项: ① 首先要明确的一点是:si ...
- vue,js直接导出excel,xlsx的方法,XLSX_STYLE 行高设置失效的问题解决,冻结窗体修改支持
1.先安装依赖:xlsx.xlsx-style.file-saver三个包 npm install xlsx xlsx-style file-saver 出现错误: This relative mod ...
- MySQL查询BLOB类型的字段
1.MySQL有四种BLOB类型: 1.TinyBlob 最大能容纳255B的数据 2.Blob 最大能容纳65KB的 3.MediumBlob 最大能容纳16MB的数据 4.LongBlob 最大能 ...
- 关于MySQL表设计,测试人员可以关注哪些点
测试人员关注数据库表设计是"测试左移"的一种手段,可以把有关数据库的潜在bug消灭在系统测试之前,从而提高交付效率. 以MySQL为例,QA可从以下方面对数据库表设计做测试的左移: ...
- .NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
前言 领导要求做一个小项目,要求独立运行,用以最少的依赖,此时不想集成到主项目中,但是又想用HzyAdmin中如此好用的自动注入,还有操作简单的仓储模式,话不多说,直接开干. HzyAdmin 是一个 ...
- .NET 9 发布 性能提升、AI 支持与全方位改进
前言 .NET 9 正式发布,这是迄今为止最高效.现代.安全.智能且高性能的 .NET 版本. 新版本凝聚了全球数千名开发者的共同努力,包含了数千项性能.安全性和功能性改进. 主要亮点 性能提升:全面 ...
- ThreeJs-01开发环境搭建
写在前面,好久不见各位,之前一段时间因为一些事情有点忙,但从未停止学习的脚步,也屯了很多笔记,会在未来的时间慢慢发出来,从今天开始一起进入WebGis,threeJs目前大前端发展的一个方向开始学习, ...