首页 > 其他分享 >2024-12-28:求出出现两次数字的 XOR 值。用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次。 请找出所有出现两次的数字,并计算它们的按位 XOR 值。 如果没

2024-12-28:求出出现两次数字的 XOR 值。用go语言,给定一个数组 nums,其中的数字出现的频率要么是一次,要么是两次。 请找出所有出现两次的数字,并计算它们的按位 XOR 值。 如果没

时间:2024-12-28 20:41:43浏览次数:5  
标签:set XOR 数字 nums 两次 异或 num

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:

chatgpt

题目来自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: 将 set1 << num 进行按位或操作,表示 num 这个数字在集合中已经被记录过。

3.计算出现两次的数字的 XOR 值

3.1.最终将 setXortotalXor 进行异或操作以获取只在 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
}

在这里插入图片描述

标签:set,XOR,数字,nums,两次,异或,num
From: https://www.cnblogs.com/moonfdd/p/18637918

相关文章

  • 物联网数字孪生可视化设计,这效果简直了
    物联网数字孪生可视化设计带来震撼效果。它将物理世界与数字世界紧密结合,通过逼真的3D模型和实时数据展示,让人们直观地了解物联网系统的运行状态。无论是工厂设备、城市交通还是能源设施,都能在可视化大屏上清晰呈现。这种设计有助于提前发现问题、优化决策,提高系统的效率和可......
  • AI数字人(无人)直播技术架构解析
    近年来,随着人工智能技术的迅猛发展,AI数字人(DigitalHuman)逐渐成为了直播行业的新兴力量。AI数字人直播不仅能够模拟人类行为、声音和情感反应,还能在虚拟环境中进行高度交互,吸引了广泛的关注与投资。本文将深入探讨AI数字人直播的核心技术架构、应用场景以及未来发展方向。一、......
  • C语言---猜数字游戏
    猜数字游戏代码#include<stdio.h>#include<time.h>#include<stdlib.h>voidmeun(){ printf("**********************\n"); printf("*******1.play*******\n"); printf("*******0.quit*******\n"); printf("......
  • 基于Java的博物馆数字化网络平台
    计算机毕业设计案例Java毕业设计案例ASP.NET毕业设计案例PHP毕业设计案例微信小程序毕业设计案例基于Java的小程序自习室预约管理系统JavaSpringboot智能膳食咨询系统【12/15/02】ThinkPHP实验教学管理系统–2024计算机毕业设计Java物业管理小程序的设计与实现基于Java的......
  • 写一个方法计算字符串长度,中文记2个,英文数字记1个
    在前端开发中,我们通常使用JavaScript来处理字符串相关的操作。以下是一个简单的JavaScript函数,用于计算字符串的长度,其中中文字符记作2个长度单位,英文和数字字符记作1个长度单位:functioncalculateStringLength(str){letlength=0;for(leti=0;i<str.length;......
  • 《机器学习》KNN算法实现手写数字识别
    目录 一、项目介绍二、数据集介绍三、需要解决的问题四、代码实际展示代码展示实验结果五、使用自己的数据进行测试代码展示结果展示六、总结 一、项目介绍通过对一张2000*1000像素写满0-9手写数字的图片进行处理。分割出训练集和测试集使用KNN算法进行训练并......
  • 在线开放课程平台:构建终身学习的数字化环境
    3.1可行性研究在线开放课程开发实现分析需要从不同的角度来进行分析可行性,比如从时间角度,经济角度,甚至操作角度。从不同的角度分析可行性会让在线开放课程开发具体化,进而达到辩证开发的正确性。3.1.1经济可行性从经济方面分析是第一要素,没有经济的支持,任何项目都如水中......
  • 在线开放课程:提高教育可及性的数字化工具
    2.1MySQL数据库本设计用到的数据库就是MySQL数据库,之所以用到这个数据库的原因很多。首先,从满足功能需求上面来讲,MySQL是符合的;其次,从学习程度来讲,MySQL相比其他数据库不管是从安装还是使用上面来讲,都比较简单,最重要的是学习起来相当便捷,比较容易入手;再次,MySQL数据库对电......
  • el-select组件改造成多选显示多个标签加数字标签的形式并且点击某个默认值不允许删除
     单独设置一个文件当做公共组件调用<template><main><el-selectref="select"v-model="values"multiplestyle="width:100%":placeholder="placeholder"@change="handleChang......
  • 了解MES系统:制造业数字化转型的关键工具
            制造执行系统(ManufacturingExecutionSystem,简称MES)在现代制造业中扮演着至关重要的角色。作为连接生产计划与实际生产现场的重要桥梁,MES系统通过实时监控、数据采集和分析,帮助企业优化生产过程,提高生产效率和质量,降低成本,实现智能制造和精益生产。本文将详细......