# 落单的数

# 难度:简单

# 描述:

给出 2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

# 样例:

给出 [1,2,2,1,3,4,3],返回 4

给出 [7, 10001, 10002, 10003, 10001, 10002, 10003, 10004, 7, 10004, 91985345, 2, 2, 3, 4, 5, 5, 4, 3, 11, 91985345],返回11

# 思路分析:

有很多解决方式,建议用indexOf来查找是否有值。

# 代码模板:

/**
 * @param A: An integer array
 * @return: An integer
 */
const singleNumber = function(A) {}
1
2
3
4
5

# 想一想再看答案

# 想一想再看答案

# 想一想再看答案

# 代码:

  1. 转对象,如果第二次出现,删除该值,最后只剩一个值
const singleNumber = function(A) {
	let [obj, res] = [{}, []]
	for (let index of A.keys()) {
		if (obj[A[index]] !== undefined) {
			// 判断出现次数
			// 第二次出现
			let test = A[index]
			delete res[obj[A[index]]] // 删除数组元素 变为undefined
		} else {
			// 第一次出现
			res.push(A[index]) // 数组元素添加进去
			obj[A[index]] = res.length - 1 // 保存下标 用于等下删除第二次出现的元素
		}
	}
	return Number(res.join('')) // 转成字符串 最终只有一个值输出
}
console.log(
	singleNumber([1, 2, 2, 1, 3, 4, 3]),
	singleNumber([
		7,
		10001,
		10002,
		10003,
		10001,
		10002,
		10003,
		10004,
		7,
		10004,
		91985345,
		2,
		2,
		3,
		4,
		5,
		5,
		4,
		3,
		11,
		91985345
	])
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  1. 查找该值的前后是否有该值,如果没有,即找到落单的值
const singleNumber = function(A) {
	var b = []
	for (var i = 0; i < A.length; i++) {
		var v = A[i]
		// 如果b数组中没有v(没有push过 代表前面没有v)并且A数组在后面也没有该值(也就是后面也没有v)
		if (b.indexOf(v) === -1 && A.indexOf(v, i + 1) === -1) {
			return v // 前面没有v 后面也没有v 即是唯一的值
		}
		b.push(v) // 添加v
	}
}
console.log(
	singleNumber([1, 2, 2, 1, 3, 4, 3]),
	singleNumber([
		7,
		10001,
		10002,
		10003,
		10001,
		10002,
		10003,
		10004,
		7,
		10004,
		91985345,
		2,
		2,
		3,
		4,
		5,
		5,
		4,
		3,
		11,
		91985345
	])
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  1. 转成本地变量操作,将该值删除,再查找是否有该值,如果没有即找到该值
const singleNumber = function(A) {
	for (var i = 0; i < A.length; i++) {
		var s = [].concat(A) //  转成本地变量
		s.splice(i, 1) // 将该值删除
		if (s.indexOf(A[i]) === -1) {
			// 被删过一次 再查找是否还有这个值
			return A[i] // 如果没有的话 即找到该值
		}
	}
}
console.log(
	singleNumber([1, 2, 2, 1, 3, 4, 3]),
	singleNumber([
		7,
		10001,
		10002,
		10003,
		10001,
		10002,
		10003,
		10004,
		7,
		10004,
		91985345,
		2,
		2,
		3,
		4,
		5,
		5,
		4,
		3,
		11,
		91985345
	])
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 点个Star支持我一下~