前言
前段时间面试美团Java技术岗时碰到了一道算法题:任意数分三组,使得每组的和尽量相等。由于时间仓促,加之面试时头昏脑涨,这道题没做出来甚至没有给出思路,导致百度面试之旅失败。这让我多少有些遗憾和不甘。因为最近接触算法的东西较多而且本身对算法感兴趣,所以回家之后绞尽脑汁想把这题做出来。
说说我的思路:首先一定要先排序,这也是解决问题的关键。然后降序排序后的前三个数各分一组把剩余数往三个数上叠加。我最开始的思路也是如此,问题在于分组个数不确定,出现极端大的数怎么办,怎么叠加?那层窗户纸就是将剩余数中的最大值加到前三个数的最小值上,然后重排序,继续叠加,直到数组个数剩三个为止!(不知道大家能不能看懂)我事后解题思路大致就是这样,太苦逼了。
还记得我当初校招的时候第一场面试也是倒在算法,算法可以说是我们每个程序员的痛,明明平时工作的时候不会太多用到,但这个却是面试必问的点,也是我们进阶必须要面对的东西。现在算法挺吃香的,但我们也不可能全身心的投入到算法的学习,这时候就需要一本好的参考书来协助我们学习。下面要与大家介绍的文档可以作为从事计算机研究与开发的技术人员的参考书,特别是对正在准备面试、参加选拔性考试以及校园面试的读者尤为有用。
这份文档以Java为描述语言,介绍了计算机编程中使用的数据结构和算法。这份文档强调问题及其分析,而非理论阐述,共分为21章,讲述了基本概念、递归和回溯、链表、栈、队列、树、优先队列和队、并查集DAT、图算法、排序、查找、选择算法(中位数)、符号表、散列、字符串算法、算法设计技术、贪婪算法、分治算法、动态规划算法、复杂度类型等内容。每章首先阐述必要的理论基础,然后给出问题集。文档中大约有700个算法问题及相应的解法,对于许多问题,文档中提供了多个具有不同复杂度的解决方法。由于篇幅限制无法全部展示出来,需要的朋友只需要评论+转发,关注我之后扫描下方的二维码即可获取!
字节内部算法文档
第1章绪论
本章的目的是阐述算法分析的重要性、它们的表示法和关系,并尽可能求解多个问题。首先,让我们重点关注算法的基本要素、分析的重要性,然后再逐步讨论上述提及的其他主题。在完成本章的学习