1
wolegequ 2019-05-09 23:11:14 +08:00 via Android 2
跟 py 无关,位运算
|
2
meik2333 2019-05-09 23:12:20 +08:00 via Android
|
3
lv2016 2019-05-09 23:14:04 +08:00
建立一个列表,从第一个数开始搜索,如果在列表里则删除,不在则加入,最后剩的数就是只出现一次的
|
5
megachweng 2019-05-09 23:18:49 +08:00 via iPhone
counter?
|
6
icreeper 2019-05-09 23:23:18 +08:00 via iPhone
数组里所有数取异或,这题在 leetcode 有
|
7
megachweng 2019-05-09 23:26:45 +08:00
```
from collections import Counter l = [1, 1, 2, 3, 4, 5, 5, 4] c = Counter(l) print(c.most_common()[-1][0]) >>> 3 ``` |
8
xabc 2019-05-09 23:37:39 +08:00
数据放入集合,完成 😄
集合元素具有唯一性 |
9
mashpolo 2019-05-09 23:43:45 +08:00 via iPhone
二进制的异或最快
|
10
justfortest 2019-05-10 00:29:21 +08:00
遍历异或运算就行
|
11
CEBBCAT 2019-05-10 00:44:23 +08:00 via Android
不仅菜,还不会搜索…… 上升空间有限啊,加油吧
|
12
azh7138m 2019-05-10 01:25:08 +08:00 via Android 2
这不是菜,是蔡
|
13
inhzus 2019-05-10 01:46:07 +08:00 via Android 1
reduce(lambda x, y: x ^ y, array)
|
14
dangyuluo 2019-05-10 02:00:06 +08:00
pythonic 的办法是用 set 和 diff
|
15
huntzhan 2019-05-10 02:01:41 +08:00 2
蔡得口交
|
16
Nimrod 2019-05-10 02:41:24 +08:00 via Android
这种题就是你做一次以后都会做了
|
17
20015jjw 2019-05-10 02:58:05 +08:00 via Android
xor
|
18
luclee1996 2019-05-10 06:03:13 +08:00 via Android
|
19
luozic 2019-05-10 07:26:53 +08:00 via iPhone
python 可以用异或或者位运算,空间复杂度是 O(1 ),不过时间复杂度 O(n)。
|
20
jmc891205 2019-05-10 07:45:32 +08:00
改下题目:
一组数据中只有一个数字出现了一次。其他所有数字都是出现了多次的。 请找出这个数字。 还有什么讨巧的方法吗? |
21
robot9 2019-05-10 08:17:45 +08:00
XOR
|
23
luozic 2019-05-10 08:47:19 +08:00 via iPhone
搞个树去处理,这种不就是压缩的算法?
|
26
wlkq 2019-05-10 09:09:29 +08:00
使用 php 的函数实现了一下。python 也有对应的函数吧
$a = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,6,7,8,9,10]; $a_r = array_reverse($a,true); $a_f = array_flip($a); $a_r_f = array_flip($a_r); $result = []; foreach ($a_f as $k => $v){ if($v != $a_r_f[$k]) continue; $result[] = $k; } // 输出 $result : [5] |
27
anyuhanfei 2019-05-10 09:11:20 +08:00
@jmc891205 用桶排序的一部分方法应该就可以吧,统计出每个元素出现的个数,数量为 1 的就是答案
|
28
bxb100 2019-05-10 09:32:21 +08:00 via Android
^ over
|
29
lshu 2019-05-10 09:33:21 +08:00
按照我理解的题意
x1+x2+...+xn+x(n+1) = s1 根据题意 我们令 前 n 个为成对的 则 2(x1+x2+...+x(n/2)) + x(n+1) = s1 同除 2 得到公式 1 x1+x2+...+x(n/2) + x(n+1)/2 = s1/2 然后去重求和得到公式 2 x1+x2+...+x(n/2) + x(n+1) = s2 两式相减 结果 = 2*s2 - s1 程序如下 l = [1, 1, 2, 2, 7, 4, 5, 5, 4] print(2 * sum(set(l)) - sum(l)) == 7 |
30
bengxy 2019-05-10 09:42:48 +08:00 1
为啥大家对新人程序员这么不友好,不都是这么过来的吗?
只有有几个提出实质解法的,其他都在喷,感情你生下来就会异或运算? |
31
inhzus 2019-05-10 09:47:43 +08:00 via Android
|
32
marsgt 2019-05-10 10:08:19 +08:00
贴个 leetcode 中文的链接吧:
https://leetcode-cn.com/problems/single-number/ |
33
dovme 2019-05-10 10:16:43 +08:00
交换律:a ^ b ^ c <=> a ^ c ^ b
任何数于 0 异或为任何数 0 ^ n => n 相同的数异或为 0:n ^ n => 0 |
34
southsala 2019-05-10 10:23:05 +08:00
Java 实现就这个样子吧,遍历一遍异或运算。
异或刚好满足这个题目需求,这个题目考点应该就是异或运算。 两个相同的数比如 88 88,二进制是 1011000 1011000,异或位运算(相同为 0)结果 0000000,也就是 0。 public static int getResult(int[] nums){ int result = 0; for (int i = 0;i < nums.length ; i++){ result = result ^ nums[i]; } return result; } |
35
Vegetable 2019-05-10 10:25:55 +08:00
leetcode 里这题目好像还是不是 easy 呢.其实就是位运算.
|
36
dovme 2019-05-10 10:33:38 +08:00
@southsala #34
public static int getResult(int[] nums){ for (int i = 1;i < nums.length ; i++){ nums[0] ^= nums[i]; } return result; } |
37
dovme 2019-05-10 10:36:26 +08:00
@dovme #36
public static int getResult(int[] nums){ for (int i = 1;i < nums.length ; i++){ nums[0] ^= nums[i]; } return nums[0]; } |
38
Achilless 2019-05-10 10:38:29 +08:00
s = [1, 1, 2, 2, 3, 4, 4]
for i in s: s.remove(i) if i in s: continue else: print(i) break |
39
zzzmj 2019-05-10 11:50:48 +08:00
....... 我感觉就算不知道 异或,纯数学应该也可以想到吧 sum(set(list)) * 2 - sum(list)
|
40
chefdd 2019-05-10 15:48:12 +08:00
异或
|
41
zdnyp 2019-05-10 15:56:34 +08:00
>>> l = [1,2,3,4,1,2,3]
>>> for i in l: ... if l.count(i) == 1: ... print(i) ... 4 >>> list 没有 count 方法吗? |
42
exonuclease 2019-05-10 15:57:36 +08:00 via iPhone
异或一遍
|
43
balaWgc 2019-05-10 16:07:56 +08:00
leetcode 上有,之前做过,异或遍历可得
|
44
lyc1116 2019-05-10 16:27:47 +08:00
在数组有序的前提下,复杂度能够优化到 O(logn), 思路是二分查找
|
45
c4f36e5766583218 2019-05-10 17:54:11 +08:00
这个三角函数我不会!
|
46
brainfxxk 2019-05-10 17:57:07 +08:00
我觉得这种题真的很无聊...
|
47
harpy 2019-05-11 00:27:21 +08:00
楼主既然想要做软件开发,还是要继续努力啊,不用位运算,这样的题目也不应该被难住。。可以想象面试官当时的表情。。。
|