数据结构与算法究竟重要吗?3个月,靠着这份学习笔记,面试当场手写
去年校招前准备算法时,我在 LeetCode 上刷了很多题,但是总觉得题刷了很多,解题能力却提高很慢,总之就是被刷题效率低下的问题所困扰
直到某天发现了一位BAT大佬https://github.com/halfrost写的 LeetCode 刷题笔记。
研读后,感觉发现了宝藏!大大提高了我的算法能力,刷 LeetCode 中等难度的题目基本不会被卡住了,忍不住给大家也安利一波!
(文末附 数据结构与算法笔记 下载地址)记得点赞哦!
数据结构与算法
B 站系列学习视频
【【Android高级工程师核心技术】性能优化之数据结构优化-上】
.
.
.
【【Android高级工程师核心技术】性能优化之数据结构优化-下】
BATJ大厂数据机构与算法面试题-合集(展示部分,持续更新....)
一、高频题集 (⭐⭐⭐)
1、无重复字符的最长子串
2、简化路径
3、复原 IP 地址
4、三数之和
5、岛屿的最大面积
6、搜索旋转排序数组
7、朋友圈
8、接雨水
9、反转链表
10、两数相加
11、合并两个有序链表
12、合并 K 个排序链表
13、买卖股票的最佳时机
14、买卖股票的最佳时机 II
15、最大子序和
16、最小栈
17、LRU 缓存机制
18、寻找两个有序数组的中位数
19、最长回文子串
20、合并两个有序数组
21、整数反转
22、排序链表
23、子集
24、全排列
25、实现二叉树中序遍历(不使用递归)
26、爬楼梯(斐波那契数列)
27、滑动窗口的最大值
28、判断单链表成环与否?
29、如何从一百万个数里面找到最小的一百个数,考虑算法的时间复杂度和空间复杂度
30、手写数组实现队列
31、java 排序算法和查找算法 (写出你所知道的排序算法及时空复杂度,稳定性)
二、次高频题集 (⭐⭐)
1、算法熟悉么?给了一个二叉排序树,出了一个给定节点找到它的下一个元素(指的是大小顺 序的下一个)的算法题。
2、x 个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完
3、求二叉树第 n 层节点数
4、如何设计一个抽奖系统,比如满 200 抽 20,满 500 抽 50。
5、求无序数组中的中位数
6、二叉树深度算法
7、堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面)
8、最快的排序算法是哪个?给阿里 2 万多名员工按年龄排序应该选择哪个算法?
9、堆和树的区别?
10、求 1000 以内的水仙花数以及 40 亿以内的水仙花数;
11、子串包含问题(KMP 算法)写代码实现;
12、万亿级别的两个 URL 文件 A 和 B,如何求出 A 和 B 的差集 C,(Bit 映射->hash 分组->多文件 读写效率->磁盘寻址以及应用层面对寻址的优化)
13、蚁群算法与蒙特卡洛算法;
14、百度 POI 中如何试下查找最近的商家功能(坐标镜像+R 树)。
15、5 枚硬币,2 正 3 反如何划分为两堆然后通过翻转让两堆中正面向上的硬币和反面向上的硬 币个数相同;
16、时针走一圈,时针分针重合几次;
17、N * N 的方格纸,里面有多少个正方形;
18、请在 100 个电话号码找出 135 的电话号码 注意 不能用正则,(类似怎么最好的遍历 LogGat 日志) 19、一个青蛙跳台阶,一次可以跳一步和两步,如果一共有 N 个台阶,可以有几种跳法?
20、写代码实现队列的基本操作,外加查找最大值;
21、图:有向无环图的解释 22、二叉树 深度遍历与广度遍历
23、B 树、B+树
24、密码学中两大加密算法是什么
25、判断环(猜测应该是链表环)
26、有一个 List 列表,去掉列表中的某一 Object 对象,如何在 for 循环里面写;
27、设计移动端的联系人存储与查询的功能,要求快速搜索联系人,可以用到哪些数据结构? (二叉排序树,建立索引)
28、回形打印二维数组
29、二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径
30、一个无序,不重复数组,输出 N 个元素,使得 N 个元素的和相加为 M,给出时间复杂度、空 间复杂度。手写算法
如果是学习算法、数据结构、或者是刷题找工作的小伙伴,一定不要错过啦!这份数据结构与算法的学习笔记与面试题合集!
数据结构与算法重要性
自行下载直达领取链接:【点击获取】
视频学习展示
算法是程序的灵魂,一个优秀的程序是可以在海量的数据中,仍保持高效计算。目前各大厂的面试要求也越来越高,算法肯定会要去。如果你不想去大厂,只想去小公司,获取并不需要要求算法。但是你永远只能当一个代码工人,也就是跟搬砖的没区别。可能一两年后你就会被淘汰。
如果不想永远当个代码工人,就在业余时间学学数据结构和算法。
在这里,我给大家整理了一些了,数据结构与算法从基础-高级系统学习视频,需要的可以查看我的【GitHub 】
-
学习笔记
尾声
大部分人停留在中高级水平,然后一直停滞不前,加上外部各种环境,产生了各种焦虑,所以很矛盾,这时候你最好的状态是快速往高级水平发展,当然这里是比较难的,这个坎也是比较难迈过去的。因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。
但是只要坚持,让自己成T字形人才发展,时间会证明一切!!1