题目
There is an array with some numbers. All numbers are equal except for one. Try to find it!
Examples
1 | findUniq([ 1, 1, 1, 2, 1, 1 ]) === 2 |
It’s guaranteed that array contains more than 3 numbers.
The tests contain some very huge arrays, so think about performance.
思路
先对list进行排序,对排序后的结果再进行判断。主要是判断首位和末位是否是目标数。
答案
我的答案
1 | def find_uniq(arr): |
最佳答案
1 | def find_uniq(arr): |
最佳答案的思路主要有利用set()
函数将排除重复数值,将最终的两个数值分离出,然后看原list中哪个数值的数量少,以及使用sort()
函数。
关于sort()函数的讲解见【Codewars每日一题】- Invert values,下面主要说下set()
函数的用法。
P.S. 这是我有史以来最接近最佳答案的一次 😄
知识点
set()函数
描述
set()
函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
语法
1 | class set([iterable]) |
- iterable – 可迭代对象对象;
返回值
返回新的集合对象。示例
重复元素在set中自动被过滤:
1
2
3
41, 1, 1, 2, 1, 1 ] a = [
s = set(a)
s
set([1, 2])通过
add(key)
方法可以添加元素到set中,可以重复添加,但不会有效果:1
2
3
4
5
63) s.add(
s
set([1, 2, 3])
2) s.add(
s
set([1, 2, 3])通过
remove(key)
方法可以删除元素:1
2
3
4
5s
set([1, 2, 3])
2) s.remove(
s
set([1, 3])交集、并集操作
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:1
2
3
4
5
6
7
8
9s
set([1, 2, 3])
2,3,4]) s2 = set([
s2
set([2, 3, 4])
s & s2
set([2, 3])
s | s2
set([1, 2, 3, 4])