IQ知识
iq record…
贪心算法
collection
R:64 个运动员, 8 个跑道, 如果要选出前四名, 至少跑几次?
Q: 最少 10 次,最多 11 次数组比较时,内部调用的是数组的 toString 方法, 而 数组的 toString 又是调用数组的 join 方法
1 | var a = [1, 2, 3]; |
- 实现 sum 函数,参数为数组,求该数组所有项之和,不允许使用循环和数组方法
遍历一个数组中的所有子项,能用到的方法只有循环和递归。
基于这个函数,我们还可以推演出一个递推公式:_sum(i) = arr[i] + _sum(i + 1)
边缘情况,当参数 i 大于等于数组的 length 之后,就无法求和了,所以这时返回 0
1 | function sum(arr) { |
2 的 n 次方写法,1>>n
/>>>无符号右移
数组通过 indexOf()和 splice()做查找删除时, 若 indexOf()没有找到值则会返回-1,而 splice()传-1 则会将数组最后一个值删除,引发 bug,故利用>>>0 将-1 转成一个大数,splice()就不会错误删除了。位运算
<< 相当于 left * (2 ^ right) 并向下取整
/>> 相当于 left / (2 ^ right) 并向下取整
1 | // 奇数则为1 |
按位取反(~): 一元运算, 1 变0,0变1
>>> 又叫无符号右移。左边高位补零,看绿色标记
1 | ~123; //-124 |
- 数组 nums 中的元素映射成二进制数 mask,取出对应的元素集合
1 | let result = [] |
- 原码、反码和补码
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
0正1负
正整数的补码是其二进制表示,与原码相同
负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
0的补码反码原码唯一,都是00000000
9. 0.3 - 0.2
因为计算机使用64位存储小数时,第1位为符号位,接着11位位指数位,后面52位为小数位,0.1和0.2在转换为小数时都存在无限循环现象,循环数都为”1100“。因此在最后一位会有0舍1入的现象,所以0.3-0.2!=0.1。因为两者的循环数相同,抵消后所以0.2-0.1=0.1。
栈区存的是基本数据类型的变量名和值,而引用数据类型存放在栈区的是变量名和引用地址,它的值放在堆中
js八大基本数据类型
Number String Boolean Null Undefined Object Symbol BigInt<<和>>,,,左移右移进位补零
sort改变原数组