首页 > 试题广场 >

寻找奇数

[编程题]寻找奇数
  • 热度指数:8974 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现在有一个长度为 n 的正整数序列,其中只有一种数值出现了奇数次,其他数值均出现偶数次,请你找出那个出现奇数次的数值。

数据范围:

输入描述:
第一行:一个整数n,表示序列的长度。第二行:n个正整数ai,两个数中间以空格隔开。


输出描述:
一个数,即在序列中唯一出现奇数次的数值。
示例1

输入

5
2 1 2 3 1

输出

3
示例2

输入

1
1

输出

1
两种解法:

1. 用一个集合作为出现过的数的记录。遍历数组,如果这个数出现过,就把它从集合里移除,否则加入。最后集合会剩一个元素,那就是答案。
class MainActivity:

    def main(self):
        # Read the data
        n = int(input())
        nums = list(map(int, filter(lambda x: len(x) > 0, input().split(' '))))
        # Initialization
        records = set()
        # Traverse
        for num in nums:
            if num in records:
                records.remove(num)
            else:
                records.add(num)
        print(list(records)[0])


if __name__ == '__main__':
    M = MainActivity()
    M.main()

2. 用异或计算。出现偶数次的数字异或完后为0,奇数次的会留下。
class MainActivity:

    def main(self):
        # Read the data
        n = int(input())
        nums = list(map(int, filter(lambda x: len(x) > 0, input().split(' '))))
        # Initialization
        result = 0
        # Traverse
        for num in nums:
            result ^= num
        print(result)


if __name__ == '__main__':
    M = MainActivity()
    M.main()
发表于 2024-08-24 14:19:32 回复(0)