2022-2023-1 寒假字节青训练习笔记 Day 1
Day1 前端
选择题1:
下列哪些是 HTML5 的新特性?
A. 语义标签 B. Canvas 绘图 C. <audio>元素 D. 增强型表单
答: ABCD
E.g:
语义标签:<footer>、<section>、<article>......
新增元素:视频音频<audio>、<video>、图形容器<Canvas>
增强表单:新元素<datalist>、<keygen>、<output>,新类型: color、date、datetime、mouth、search、tel.....
选择题2:
下面可以继承的属性有哪些?
A. font-size B. background C. color D. cursor
答:ACD
E.g:
在CSS中,每一个属性都有继承性的设置,表现为 inherited:Yes | no
,而Background是默认认不继承父元素的,表现为 background-xxxxx:initial
但可以通过设置显示来继承如:background:inherit
。
默认继承的CSS属性有:
所有元素可继承:visibility 和 cursor
内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction
块状元素可继承:text-indent和text-align
列表元素可继承:list-style、list-style-type、list-style-position、list-style-image
表格元素可继承:border-collapse
编程题1:
题目
给定一个十进制整数字符串,判断它是否是 4 的幂。
示例 1
输入:"16",输出:true
示例 2
输入:"101",输出:false
示例 3
输入:"70368744177664",输出:true
限定语言:C、 C++、Java、Python、JavaScript V8
思路1:
借由数学方法,第一时间想到的是,直接用Math库的对数运算,当以4为底的取值为整数输出true,当然log函数是以e为底的,通过换底得到:
因为 $$ log{{\small {\scriptsize B} } } N = \frac{log{\scriptsize e} N}{log{\scriptsize e} B} $$ 所以 $$ log{{\small {\tiny 4} } } 16 = \frac{log{\scriptsize e} 16}{log{\scriptsize e} 4} =\frac{Math.log(16)}{Math.log(4)}=2 $$ 当取值为整数(>=0)的0、1、2、3、4~~ 即为4的幂。
思路2:
从计算机角度去看,幂运算是不断乘以自身,那么不断的对自身求余,若求余结果一直为0,直到最后值为1,这样的值则是匹配值。若求余过程有非零值,则非匹配值。
思路3:
从二进制角度看,首先我们知道2的等幂是比较特殊的,所有2的幂以二进制表达的话都是最高位为1,而低位都为0 :
1 = 1
2 = 10
4 = 100
8 = 1000
16 = 10000
对比4的等幂 :
1 = 1
4 = 100
16 = 10000
64 = 1000000
可以发现2的等幂包括了4的等幂,但4的幂的二进制是
最高位在偶数位的1(4在偶数位2,16在偶数位4),
进一步的,我们可以通过判断最高位1的位置 => 判断这个数是不是4的等幂。
判断一个数只有最高位是1: (n&(n-1)) == 0
判断一个数的最高位1出现在偶数二进制位上 (n&0xAAAAAAAA) == 0
编程题2
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略空格、字母的大小写。
示例
输入:"A man, a plan, a canal: Panama",输出:true
限定语言:C、 C++、Java、Python、JavaScript V8
思路:
只考虑字母和数字字符,忽略大小写空格,可以用toLocalLowerCase()
将文本先处理为小写,再用replace
替换取反正则,然后再取反处理后的字符串,再把两者比较。
var str = "A man, a plan, a canal: Panama";
var array = str.toLocaleLowerCase().replace(/[^a-z]/g,'');
var array2 = array.split('').reverse().join('');
alert(array === array2)
思路2:
有看见是用双指针的实现,我觉得实在有点没必要,因为这样的回文串根本没有一点实际意义。
编程题3
题目
给定一个字符串,找出该字符串中最长回文子串的长度。
示例 1
输入:"abc",输出:0
示例 2
输入:"abcbe",输出:3
示例 3
输入:"acdcecdcf",输出:7
限定语言:C、 C++、Java、Python、JavaScript V8
思路:
这题比较麻烦,可以直接暴力破解,也可以上动态规划,emm 有空再写吧