File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } deliciousness
3
+ * @return {number }
4
+ */
5
+ const countPairs = function ( deliciousness ) {
6
+ const N = deliciousness . length
7
+ deliciousness . sort ( ( a , b ) => a - b )
8
+ const mp = { } ,
9
+ mod = 10 ** 9 + 7
10
+ let ret = 0
11
+ for ( let i = 0 ; i < N ; i ++ ) {
12
+ if ( deliciousness [ i ] !== 0 ) {
13
+ let sum = 1 << ( 32 - __builtin_clz ( deliciousness [ i ] ) - 1 )
14
+ ret += mp [ sum - deliciousness [ i ] ] || 0
15
+ ret += mp [ ( sum << 1 ) - deliciousness [ i ] ] || 0
16
+ if ( ret >= mod ) ret -= mod
17
+ }
18
+ if ( mp [ deliciousness [ i ] ] == null ) mp [ deliciousness [ i ] ] = 0
19
+ mp [ deliciousness [ i ] ] ++
20
+ }
21
+ return ret
22
+ }
23
+
24
+ function __builtin_clz ( num ) {
25
+ if ( num === 0 ) return 32
26
+ return 32 - dec2bin ( num ) . length
27
+ }
28
+
29
+ function dec2bin ( num ) {
30
+ return ( num >>> 0 ) . toString ( 2 )
31
+ }
You can’t perform that action at this time.
0 commit comments