golang_算法: leetcode_数组05-只出现一次的数字

本文介绍了如何使用Go语言解决LeetCode数组问题,特别是找到数组中只出现一次的数字。通过算法分析和代码示例,深入理解数组操作和奇偶性在解决问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//设计算法:
//1.
//1) 设置map[int]bool,默认的bool是false

//注意有2种键值对,要分清:
//nums是数组,遍历中的键值对结构是0-值1,1-值2...
//m是一个map,对应的是值1-true,值2-false...

//2)进行判断所有值的全改成true,如果再遇到相同的v时,会执行m[v]==true的语句,m[v]会变为false

func singleNumber(nums []int) int {
	m := make(map[int]bool)
	for _, v := range nums {
		if m[v] == true {
			m[v] = false
		}else{
			m[v] = true
		}
	}
	//无重复值的数,m中的值为true
	var k int
	for k, v := range m{
		if v == true {
			fmt.Println("k:",k)
		}
	}
	return k
}

//2.利用map中的delete删除map中的键值对
func singleNumber2(nums []int) int {
	m := make(map[int]struct{})
	for _, v := range nums {
		_, ok := m[v]
		if ok {
			delete(m,v)
		}else{
			m[v] = struct{}{}  //给定一个值,构成hashmap键值对结构
		}
	}

	for k := range m{ //取hashmap中的键,键即我们所要的数
		fmt.Println(k)
		return k
	}
	return 0 //防止报错,给一个值
}

//3.利用0与数组中的值进行"异或"操作
//如果,数组中的值出现2次,2次异或后的结果为原来的数
func singleNumber3(nums []int) int{
	ret := 0
	for _, num := range nums {
		ret ^= num //ret = ret ^ num
		// 不是取幂,是异或操作,转化为2进制:相同为0,不同为1
		fmt.Println(ret)
	}
	fmt.Println(ret)
	return ret
}

func main() {
	nums := []int{2,1,1,4,4}
	singleNumber3(nums)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值