Python算法例26 落单的数Ⅳ

1. 问题描述

给定数组,除了一个数出现一次外,所有数都出现两次,并且所有出现两次的数都挨着,找出出现一次的数。

2. 问题示例

给出nums=[3,3,2,2,4,5,5],返回4,4只出现了一次;给出nums=[2,1,1,3,3],返回2,2只出现了一次。

3. 代码实现

使用异或运算实现

使用异或运算的性质。异或运算具有以下几个性质:

  1. a ^ a = 0,任何数与自身进行异或运算结果为0。
  2. a ^ 0 = a,任何数与0进行异或运算结果为其本身。
  3. 异或运算满足交换律和结合律:a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b。

基于以上性质,可以通过遍历数组并依次进行异或运算,最后的结果就是只出现一次的数字。

具体步骤如下:

  1. 初始化一个变量 result 为0,用于存储所有元素的异或结果。
  2. 遍历数组 nums,对每个元素进行异或运算并更新 result:result ^= num。
  3. 返回 result。
def find_single_number(nums):
    result = 0
    for num in nums:
        result ^= num

    return result

# 从输入获取数组
input_str = input("请输入数组,以逗号分隔:")
nums = list(map(int, input_str.split(',')))

# 调用函数并输出结果
result = find_single_number(nums)
print("只出现一次的数字是:", result)

这个算法的时间复杂度是 O(n),其中 n 是数组的长度。它需要遍历数组一次来计算异或结果,异或运算的时间复杂度是 O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北辰星Charih

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值