- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常考算法题解析
这⼀章节依托于上⼀章节的内容,毕竟了解了数据结构我们才能写出
更好的算法。
对于⼤部分公司的⾯试来说,排序的内容已经⾜以应付了,由此为了
更好的符合⼤众需求,排序的内容是最多的。当然如果你还想冲击更
好的公司,那么整⼀个章节的内容都是需要掌握的。对于字节跳动这
类⼗分看重算法的公司来说,这⼀章节是远远不够的,剑指Offer
( )应该是你更好的
选择。
这⼀章节的内容 量会很⼤,不适合在⾮电脑环境下阅读,请各
位打开代码编辑器,⼀⾏⾏的敲代码,单纯阅读是学习不了算法
的。
另外学习算法的时候,有⼀个可视化界⾯会相对减少点学习的难度,
具体可以阅读 algorithm-visualizer
(
visualizer) 这个仓库。
位运算
在进⼊正题之前,我们先来学习⼀下位运算的内容。因为位运算在算
法中很有⽤,速度可以⽐四则运算快很多。
在学习位运算之前应该知道⼗进制如何转⼆进制,⼆进制如何转⼗进
制。这⾥说明下简单的计算⽅式
⼗进制 33 可以看成是 32 + 1 ,并且 33 应该是六位⼆进制
的(因为 33 近似 32,⽽ 32 是 2 的五次⽅,所以是六位),
那么 ⼗进制 33 就是 100001 ,只要是 2 的次⽅,那么就是
1否则都为 0
那么⼆进制 100001 同理,⾸位是 2^5 ,末位是 2^0 ,相加
得出 33
左移
10 1 // - 20
左移就是将⼆进制全部往左移动,10 在⼆进制中表示为 1010 ,左
移⼀位后变成 10100 ,转换为⼗进制也就是 20 ,所以基本可以把
左移看成以下公式 a * (2 ^ b)
算数右移
10 1 // - 5
算数右移就是将⼆进制全部往右移动并去除多余的右边,10 在⼆进
制中表示为 1010 ,右移⼀位后变成 101 ,转换为⼗进制也就是
5,所以基本可以把右移看成以下公式 int v = a / (2 ^ b)
右移很好⽤,⽐如可以⽤在⼆分算法中取中间值
13 1 // - 6
按位操作
按位与
每⼀位都为 1 ,结果才为 1
8 7 // - 0
// 1000 0111 - 0000 - 0
按位或
其中⼀位为 1 ,结果就是 1
8 | 7 // - 15
// 1000 | 0111 - 1111 - 15
按位异或
每⼀位都不同,结果才为 1
8 ^ 7 // - 15
8 ^ 8 // - 0
// 1000 ^ 0111 - 1111 - 15
// 1000 ^ 1000 - 0000 - 0
从以上代码中可以发现按位异或就是不进位加法
⾯试题:两个数不使⽤四则运算得出和
这道题中可以按位异或,因为按位异或就是不进位加法,8 ^ 8 =
0 如果进位了,就是 16 了,所以我们只需要将两个数进⾏异或操
作,然后进位。那么也就是说两个⼆进制都是 1 的位置,左边应该
有⼀个进位 1 ,所以可以得出以下公式 a + b = (a ^ b) + ((a
b) 1) ,然后通过迭代的⽅式模拟加法
function sum(a, b) {
if (a == 0) return b
if (b == 0) return a
let newA = a ^ b
let newB = (a b) 1
return sum(newA, newB)
}
排序
以下两个函数是排序中会⽤到的通⽤函数,就不⼀⼀写了
function checkArray(array) {
if (!array) return
}
function swap(array, left, right) {
let rightValue = array[right]
array[right] = array[left]
array[left] = rightValue
}
冒泡排序
冒泡排序的原理如下,从第⼀个元素开始,把当前元素和下⼀个索引
元素进⾏⽐较。如果当前元素⼤,那么就交换位置,重复操作直到⽐
较到最后⼀个元素,那么此时最后⼀个元素就是该数组中最⼤的数。
下⼀轮重复以上操作,但是此时最后⼀个元素已经是最⼤数了,所以
不需要再⽐较最后⼀个元素,只需要⽐较到 le
您可能关注的文档
- 096百联浙江奥特莱斯1 096百联浙江奥特莱斯45.pdf
- hr给应届生的黄金面试技巧.pdf
- 20140916讲义-5种方法一眼看出图形推理题答案.pdf
- 2006-2010三菱伊柯丽斯eclipse 2009三菱伊柯丽斯eclipse gr00001200-55a.pdf
- 2018年结构化面试热点预测.pdf
- 浪潮服务器全线概览.pdf
- 中山沙溪农业板块项目简介09061.pdf
- 中建五局材料送审sub-c5-139铸铁止回阀、过滤器第二次送审.pdf
- 第四十三章etap数据同步数据交换.pdf
- 高中数学高考综合复习专题二十三 直线与圆锥曲线问题的解题策略研究性学习之一.pdf
- 中国国家标准 GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- 《GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计》.pdf
- 中国国家标准 GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- 《GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置》.pdf
- 中国国家标准 GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- GB/T 17889.4-2024梯子 第4部分:铰链梯.pdf
- 《GB/T 17889.4-2024梯子 第4部分:铰链梯》.pdf
文档评论(0)