26 天吃透算法笔记,面试字节,面试官朝我比了个“ok”
![26天吃透算法笔记,面试字节,面试官朝我比了个“ok”](https://static001.geekbang.org/infoq/ae/ae4be0ebb41452e27037f714a3ebeabd.jpeg)
186 道高阶算法题和高阶算法学习资料已经被我整理成 PDF,有需要这份 PDF 的朋友添加小助理 vx:mxzFAFAFA 即可!!
算法是敲门砖
对于字节这样注重算法的大厂来说,不会算法基本上是与之无缘。前阵子因为疫情原因离职三个月,凭着一份算法宝典,在字节打开了新世界。
![](https://static001.geekbang.org/infoq/4f/4f0d63f3defd3612aa7301ee4f08d61b.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
大厂必考:186 道算法真题(带解析)
有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
一个整数,它加上 100 后是一个完全平方数,加上 168 又是一个完全平方数,请问该数是多少?
输入某年某月某日,判断这一天是这一年的第几天?
输入三个整数 x,y,z,请把这三个数由小到大输出。
输出 9*9 口诀?
利用递归方法求 5!
两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和 x 比,c 说他不和 x,z 比,请编程序找出三队赛手的名单。
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和
兔子的规律为数列 1,1,2,3,5,8,13,21....
判断 101-200 之间有多少个素数,并输出所有素数。
打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个 "水仙花数 ",因为 153=1 的三次方+5 的三次方+3 的三次方
将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5
利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用 A 表示,60-89 分之间的用 B 表示
输入两个正整数 m 和 n,求其最大公约数和最小公倍数
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个数相加),几个数相加有键盘控制
一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=1+2+3.编程 找出 1000 以内的所有完数
一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时,共经过多少米?第 10 次反弹多高
给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
![](https://static001.geekbang.org/infoq/c3/c31c3ff9d288368a43ab62060ed1154a.png)
刷题能理解算法题答案的由来,但是真正面试考的是你是否真正搞懂了算法,搞懂算法其实真不算难。多看资料多刷题,一切都不是问题。小编整理了一份关于算法的秘笈,需要的朋友关注转发并私信我(算法)即可获得免费下载方式
高阶算法类型
二分算法
又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
![](https://static001.geekbang.org/infoq/d2/d2c835aa8ceb824cfdc58c7a1ce56dfc.png)
冒泡排序算法
比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉”到数组第 N-1 个位置。N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成。
![](https://static001.geekbang.org/infoq/d6/d6af18628a593f243a8e31308c82269d.png)
归并排序算法
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序的序列合并为整体有序序列。
![](https://static001.geekbang.org/infoq/d7/d767535cf3ea05c4f570b17c0f9a6b95.png)
桶排序算法
桶排序的基本思想是: 把数组 arr 划分为 n 个大小相同的区间(桶),每个子区间各自排序,最后合并 。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。
1.找出待排序数组中的最大值 max、最小值 min
2.我们使用 动态数组 ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(maxmin)/arr.length+1
3.遍历数组 arr,计算每个元素 arr[i] 放的桶
![](https://static001.geekbang.org/infoq/e7/e7df39a69e8f9d902f93e29b1aba1de5.png)
基数排序算法
将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
![](https://static001.geekbang.org/infoq/1a/1a5d15f2aff01c4ff3c504b290d9e5a9.png)
剪枝算法
在搜索算法中优化中,剪枝,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。
![](https://static001.geekbang.org/infoq/42/42269b1921ba524b6ccbda6dfe023704.png)
另外 PDF 还包含了
玩转算法必备基础
![](https://static001.geekbang.org/infoq/b7/b76c97140d835c6f9abfa643b2d4629b.png)
![](https://static001.geekbang.org/infoq/fc/fc58b1e156cfc590fec5a507cfa007e9.png)
动态规划系列
![](https://static001.geekbang.org/infoq/c3/c374ed56caeb505c022c732f9e2991d2.png)
数据结构系列
![](https://static001.geekbang.org/infoq/81/81c97f2e8d32aa32145c4362366d98c3.png)
算法思维系列
![](https://static001.geekbang.org/infoq/b6/b65e1f6377d640d3806949683814695a.png)
高频面试系列
![](https://static001.geekbang.org/infoq/84/847864a9003d54158f467bb2659a4d36.png)
最后
两份 PDF 已经被小编整理好了,需要 186 道高阶面试题和算法学习资料的朋友添加小助理 vx:mxzFAFAFA 即可!!
版权声明: 本文为 InfoQ 作者【比伯】的原创文章。
原文链接:【http://xie.infoq.cn/article/7b9f3ea2e87925ec2692c5cb1】。文章转载请联系作者。
评论