-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathonlyOnceNumber.html
56 lines (54 loc) · 1.64 KB
/
onlyOnceNumber.html
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!--
* @Author: your name
* @Date: 2020-09-05 14:57:08
* @LastEditTime: 2020-09-05 16:26:45
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \jsQuestion\onlyOnceNumber.html
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
</html>
<script>
// 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
// 说明:
// 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
/* 输入: [2,2,1]
输出: 1 */
const arr = [2, 2, 3, 3, 4, 4, 5];
// 第一种
// const arr = [2,2,3,3,4,4,5]
// const getOnlyNum = function (arr) {
// for(let i = 0; i<arr.length;i++) {
// if(arr.indexOf(arr[i])===arr.lastIndexOf(arr[i])) {
// return arr[i]
// }else{
// return -1
// }
// }
// }
// 第二种
function some(a, b) {
a = a ^ b;
b = b ^ a;
a = a ^ b;
console.log(a, b);
}
some(11, 22);
const newOnceNum = function (nums) {
let ants = 0;
for (const num of nums) {
ants ^= num;
}
return ants;
};
// 异或符 ^ a = a ^ b 他是一种不带进位的二进制加法 他会把 a和b转换成二级制 并对每一位进行判断 相等便为0 不等变为 1 2 ^ 1 2的二进制为 0010 1的二进制为 0001 异或之后变为 0011 = 3 所以 2 ^ 1 = 3
console.log(newOnceNum(arr));
// console.log(getOnlyNum(arr));
</script>