【Codewars每日一题】- Find the unique number

题目

题目地址

There is an array with some numbers. All numbers are equal except for one. Try to find it!

Examples

1
2
findUniq([ 1, 1, 1, 2, 1, 1 ]) === 2
findUniq([ 0, 0, 0.55, 0, 0 ]) === 0.55

It’s guaranteed that array contains more than 3 numbers.
The tests contain some very huge arrays, so think about performance.

思路

先对list进行排序,对排序后的结果再进行判断。主要是判断首位和末位是否是目标数。

答案

我的答案

1
2
3
def find_uniq(arr):
arr.sort()
return arr[0] if arr[0] != arr[1] else arr[-1]

最佳答案

1
2
3
def find_uniq(arr):
a, b = set(arr)
return a if arr.count(a) == 1 else b

最佳答案的思路主要有利用set()函数将排除重复数值,将最终的两个数值分离出,然后看原list中哪个数值的数量少,以及使用sort()函数。

关于sort()函数的讲解见【Codewars每日一题】- Invert values,下面主要说下set()函数的用法。

P.S. 这是我有史以来最接近最佳答案的一次 😄

知识点

set()函数

描述

set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

语法

1
class set([iterable])
  • iterable – 可迭代对象对象;

    返回值

    返回新的集合对象。

    示例

  • 重复元素在set中自动被过滤:

    1
    2
    3
    4
    >>> a = [ 1, 1, 1, 2, 1, 1 ]
    >>> s = set(a)
    >>> s
    set([1, 2])
  • 通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

    1
    2
    3
    4
    5
    6
    >>> s.add(3)
    >>> s
    set([1, 2, 3])
    >>> s.add(2)
    >>> s
    set([1, 2, 3])
  • 通过remove(key)方法可以删除元素:

    1
    2
    3
    4
    5
    >>> s
    set([1, 2, 3])
    >>> s.remove(2)
    >>> s
    set([1, 3])
  • 交集、并集操作
    set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> s
    set([1, 2, 3])
    >>> s2 = set([2,3,4])
    >>> s2
    set([2, 3, 4])
    >>> s & s2
    set([2, 3])
    >>> s | s2
    set([1, 2, 3, 4])
hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
0%