2020最新

您所在的位置:网站首页 一些简单的数学问题 2020最新

2020最新

2024-07-09 16:15| 来源: 网络整理| 查看: 265

0x01.概述

作为一个程序员,算法能力必不可少,虽然不一定是算法工程师,但是算法还是彰显着个人的编码能力,面试中也经常会被问到,甚至会被要求临场做算法题,所以,还是好好积累吧。

个人其实对算法挺有兴趣的,从3月份开始,陆陆续续刷了一些算法题,把一些有意义的记录下来了,也顺便写了一些题解,个人认为,还是挺有收获的。之前写了一篇算法文章的目录,不过后来就忘了实时去更新了,于是现在,想把之前做过的一些有意义的算法题分享出来,刚好整理了100篇比较有意义的。希望对大家有所帮助。

在这里插入图片描述

0x02.说明

关于语言的选择:

前半段主要用C++写的,后半段主要用Java写的。其实什么语言没有太大区别,主要是思想,用着顺手就行。这里安利一波Java,哈哈,Java写算法题写多了,真的比较舒适。

关于文章类型的选择:

选取了一些较为基本的算法类型,都是比较常见的。不涉及ACM等难度太高的题,大佬们移步哈。都是一些比较经典的问题。

关于题目的来源:

平时主要刷题的平台是Leetcode,因为是函数式的,比较方便。还有一些是在《剑指offer》,《程序员面试金典》中看到比较好的,所有题目后面都给出了出处。

关于题解的说明:

题解是我自己所写,有时候也参考了一些官方题解的思想,可能更好理解。题解的代码都提交测试过的,保证暂时没有问题。个人水平有限,可能文章里面存在一些问题,还望大佬多多指点。每个题目附带了原文链接,不喜欢阅读我题解的小伙伴们也可以直接移步原出处哈。

关于算法能力提升的一些意见:

个人认为,算法来说,思想最为重要,有算法的严谨思想,才是算法能力提升的基础。刷题就是培养算法思想的一种实际行动。好好理解透一个问题,或者一类问题,远胜于你麻木的刷大量的题。算法确实也有模板题,只需要照着模板就能做出,但问题是,照着模板就一定能做出来嘛,是否真正理解了为什么这个模板可以通用。

关于分类:

有些分类确实不太好分,所以就单独列出来了。主要的还是区分开来了。 0x03.正文–精选算法100题(附个人题解) 分类一:动态规划(dp)

没错,就是你熟悉的dp,dp说简单也简单,说难也实在是太难了,重点是如何找到里面的状态转移方程。经过这些题目的训练,希望你能有一些初步的dp思路了。

题目名称来源个人题解备注01.打家劫舍Leetcode题198:戳我前往戳我前往估计是最好的dp入门题型了02.斐波拉契数列经典问题戳我前往确实比较经典哦~03.零钱兑换问题Leetcode题322:戳我前往戳我前往也是一个比较经典的问题了04.零钱兑换IILeetcode题518:戳我前往戳我前往零钱问题通用解法05.最长上升子序列Leetcode题300:戳我前往戳我前往堪称数组dp中的典范06.牌型种数蓝桥杯:链接暂无戳我前往二维动态规划,要仔细想想07.最低票价Leetcode题983:戳我前往戳我前往如何状态转移?08.不同的二叉搜索树Leetcode题152:戳我前往戳我前往你会发现dp的神奇之处09.礼物的最大价值《剑指offer》题47戳我前往优化dp的思路10.接雨水Leetcode题42:戳我前往戳我前往需要仔细思考以发现dp11.编辑距离Leetcode题72:戳我前往戳我前往最为经典的二维dp题型12.买卖股票的最佳时机(6题)Leetcode6题:戳我前往戳我前往统一化的dp思维,棒13.鸡蛋掉落Leetcode题887:戳我前往戳我前往有些难度哦~14.最大正方形Leetcode题221:戳我前往戳我前往矩阵中的dp思路15.和为K的子数组Leetcode题560:戳我前往戳我前往前缀和也是dp的思路 分类二:搜索类(DFS,BFS,回溯,暴力搜索)

搜索类的算法题应该是随便哪个算法比赛都可以看到,虽然经典,但在这上面还是会有比较难的问题,所以,掌握基本思路和套路就显得格外重要。

题目名称来源个人题解备注16.图的深搜和广搜经典问题戳我前往搜索中的经典问题17.方格填数蓝桥杯:链接暂无戳我前往揣摩一下DFS的思路18.路径之谜蓝桥杯:链接暂无戳我前往经典改编迷宫问题19.岛屿的最大面积Leetcode题695:戳我前往戳我前往最常见的矩阵中的DFS20.逃离大迷宫Leetcode题1036:戳我前往戳我前往各种搜索思想都可以应用21.单词搜索Leetcode题79:戳我前往戳我前往字符串中的搜索22.检查网格中是否存在有效路径Leetcode题1391:戳我前往戳我前往思考另类的搜索23.地图分析Leetcode题1162:戳我前往戳我前往多源BFS24.机器人的运动范围《剑指offer》13题戳我前往DFS进行计数的基本思路25.括号生成Leetcode题22:戳我前往戳我前往用DFS生产括号26.01 矩阵Leetcode题542:戳我前往戳我前往矩阵中的搜索27.岛屿数量Leetcode题200:戳我前往戳我前往根据需求使用DFS28.全排列问题Leetcode题46:戳我前往戳我前往最经典的回溯算法 分类三:字符串

别忽视字符串的算法问题,它难起来可以非常难,简单的也很简单,面试喜欢提问,而且特别容易出错,需要引起重视。

题目名称来源个人题解备注29.KMP算法经典算法戳我前往经典字符串匹配算法30.拼写单词Leetcode题1160:戳我前往戳我前往很简单的字符串问题31.竖直打印单词Leetcode题1324:戳我前往戳我前往简单但值得思考32.不含 AAA 或 BBB 的字符串Leetcode题984:戳我前往戳我前往巧妙构造出字符串33.实现Trie(前缀树)Leetcode题208:戳我前往戳我前往字符串中经典的算法34.最长快乐前缀Leetcode题1392:戳我前往戳我前往如何处理字符串的前后缀35.单词搜索IILeetcode题212:戳我前往戳我前往前缀树的应用36.单词的压缩编码Leetcode题820:戳我前往戳我前往前缀树灵活运用37.判定字符是否唯一《程序员面试金典》01.02戳我前往简单但值得思考38.判定是否互为字符重排《程序员面试金典》 01.02戳我前往简单的面试题39.无重复字符的最长子串Leetcode题3:戳我前往戳我前往字符串中的滑动窗口40.字符串转换整数Leetcode题8:戳我前往戳我前往需要考虑的细节很多41.翻转字符串里的单词Leetcode题151:戳我前往戳我前往正则匹配42.整数转换英文表示Leetcode题273:戳我前往戳我前往非常实用的算法题43.统计重复个数Leetcode题466:戳我前往戳我前往循环结剪枝44.超级回文数Leetcode题906:戳我前往戳我前往字符串与大数的处理思路45.单词子集Leetcode题96:戳我前往戳我前往特征思想的应用 分类四:容器类(哈希表,栈,队列,Map,Set)

容器类的算法题一般需要根据一些容器的特点来解决响应的问题,还有需要选择合适的容器进行新的数据结构的设计,掌握它们的使用,非常重要。

题目名称来源个人题解备注46.按位与为零的三元组Leetcode题82:戳我前往戳我前往哈希表优化47.设计地铁系统Leetcode题1396:戳我前往戳我前往合理选择容器48.LFU缓存《程序员面试金典》戳我前往选择容器来设计49.设计推特Leetcode题355:戳我前往戳我前往很实用的算法50.最小栈Leetcode题155:戳我前往戳我前往两栈设计最小栈51.子数组的最小值之和Leetcode题907:戳我前往戳我前往单调栈的应用52.栈的压入、弹出序列《剑指offer》戳我前往栈的合法序列53.有效括号的嵌套深度Leetcode题1111:戳我前往戳我前往模仿栈54.逆波兰算法经典算法戳我前往后缀表达式关键算法 分类五:数学思维类(含位运算思想)

数学思维类的题由于需要很强大的数学思维,但是这又不是一天可以练成的,所以,也常常在面试中会被问到,只有慢慢的积累,才是王道。

题目名称来源个人题解备注55.水壶问题Leetcode题365:戳我前往戳我前往经典数学问题56.三维形体的表面积Leetcode题892:戳我前往戳我前往空间思想解决算法问题57.生命游戏Leetcode题289:戳我前往戳我前往数学思维的运用58.交点《程序员面试金典》16.03戳我前往二维平面的交点问题59.使数组唯一的最小增量Leetcode题945:戳我前往戳我前往数学思维的运用60.数值的整数次方《剑指offer》题16戳我前往非常容易出错的面试题61.求 1+2+…+n《剑指offer》戳我前往短路原则62.1~n整数中1出现的次数《剑指offer》戳我前往数学思维找规律63.数组中数字出现的次数《剑指offer》戳我前往分组异或 分类六:链表

链表是一种非常常见的数据结构,不管在实际应用还是算法竞赛中,都经常出现,掌握对它们的基本处理,非常重要。

题目名称来源个人题解备注64.两数相加Leetcode题2:戳我前往戳我前往链表的加法问题65.链表的中间结点Leetcode题876:戳我前往戳我前往快慢指针思想66.删除链表的倒数第N个节点Leetcode题19:戳我前往戳我前往哑节点和双指针67.合并两个有序链表Leetcode题21:戳我前往戳我前往链表的递归处理68.合并K个排序链表Leetcode题23:戳我前往戳我前往优先队列的使用69.删除排序链表中的重复元素 IILeetcode题82:戳我前往戳我前往链表基础指针操作70.分隔链表Leetcode题86:戳我前往戳我前往双指针操作71.旋转链表Leetcode题61:戳我前往戳我前往巧转循环链表72.两两交换链表中的节点Leetcode题24:戳我前往戳我前往递归解决73.反转链表Leetcode题206:戳我前往戳我前往多种思路反转链表74.K 个一组翻转链表Leetcode题25:戳我前往戳我前往分组逆转75.判断链表是否有环《剑指offer》戳我前往多种思路判断链表是否有环76.单链表的插入排序Leetcode题147:戳我前往戳我前往链表的插入排序77.两数相加 IILeetcode题445:戳我前往戳我前往用栈翻转链表元素 分类七:树

树也是一种非常重要的数据结构,因为很多容器的底层都设计到树,所以树也成了面试常问的重点了,你需要对他们的一些基本算法题,非常熟练。

题目名称来源个人题解备注78.删除给定值的叶子结点Leetcode题1325:戳我前往戳我前往树的简单删除问题79.二叉树的最大最小深度Leetcode题104:戳我前往戳我前往二叉树的深度问题80.将有序数组转换为二叉搜索树Leetcode题108:戳我前往戳我前往数组和二叉树的转换81.二叉树的右视图Leetcode题199:戳我前往戳我前往二叉树的视图转换82.另一个树的子树Leetcode题572:戳我前往戳我前往两树关系的判断83.二叉树的最近公共祖先《剑指offer》戳我前往公共祖先问题84.二叉树的层序遍历序列存储Leetcode题102:戳我前往戳我前往二叉树遍历序列的存储85.验证二叉搜索树Leetcode题98:戳我前往戳我前往二叉搜索树的验证 分类八:数组(贪心,二分)

数组类的算法题也是,说难不难,说简单不简单,而且数组是平时编码用的最多的结构了,所以,需要对它的一些基本算法引起重视。

题目名称来源个人题解备注86.两个数组间的距离值Leetcode题1385:戳我前往戳我前往二分法应用87.旋转矩阵《程序员面试金典》戳我前往原地修改88.合并区间Leetcode题56:戳我前往戳我前往排序处理数组问题89.跳跃游戏Leetcode题55:戳我前往戳我前往贪心思想运用90.盛最多水的容器Leetcode题11:戳我前往戳我前往双指针91.统计「优美子数组」Leetcode题1248:戳我前往戳我前往滑动窗口92.搜索旋转排序数组Leetcode题33:戳我前往戳我前往二分搜索93.山脉数组中查找目标值Leetcode题1095:戳我前往戳我前往二分搜索94.快乐数Leetcode题202:戳我前往戳我前往快慢指针判断成环思路95.跳跃游戏 IILeetcode题45:戳我前往戳我前往贪心思想96.x 的平方根Leetcode题69:戳我前往戳我前往二分法取平方根97.数组中的逆序对《剑指offer》题51戳我前往归并中的计数(分治)98.课程表 IILeetcode题210:戳我前往戳我前往数组中的拓扑排序 分类九:经典算法列举

最后两个,凑个整,刚好100,是一些比较经典的算法列举。

题目名称来源个人题解备注99.普利姆算法经典算法戳我前往最小生成树经典算法100.约瑟夫环经典算法戳我前往很经典的动态问题 0x04.End

希望这100个算法题能对正在看的你有所帮助! 后续还会继续更新更多的内容。 您的支持,是我分享的不竭动力!

– ATFWUS 2020-05-18


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3