Minimum Knight Moves
给一个无限大的棋盘(2d数组), 在0,0有一个马, 马走日, 求到x,y的步数 这个就是搜索问题. 因为无限大, 所以只能是bfs, 稍微剪枝一下就可以, 不过我的答案虽然过了, 但是好慢啊.
给一个无限大的棋盘(2d数组), 在0,0有一个马, 马走日, 求到x,y的步数 这个就是搜索问题. 因为无限大, 所以只能是bfs, 稍微剪枝一下就可以, 不过我的答案虽然过了, 但是好慢啊.
给一个无向图, 求几个强连通组件. 并查集的例题.
给一个数组, 里面的数字不同, 求多少种a*b=c*d, abcd都是数组的数字, 但是不相同. 算下乘积的频率即可, 答案是n*(n-1),从频率中任意选2个的个数, 然后再乘以4, 4种互换可能.
给一个0和1的二维矩阵, 求最大的全1子矩阵(不一定是square). 这个题首先观察例子, 发现肯定有排序, 然后再看一遍能看出来扫描可以通过查找连续1的个数来判断, 所以划分为一个个子问题, 即: 当扫完一行的时候, 如何计算当前的最大全是1的area. 我们需要先找到当前从上到下最多连续1的个数, 然后排序(greedy)后乘以当前的index后取最大.
给一个数字n, 求[1, n]的一个序列满足除了1以外的数组出现2次, 1 出现1次. 并且要求字典序最大的数组. 这个题试了几种规律, 发现如果n是奇数, 则第二位可放n-2, 依次递减, 然后再放偶数. 但是发现这种也有漏洞. 因为1只能放一次, 所以不好判断1最后的位置, 这会影响字典序的大小, 所以最后用的广搜实现的.
给一个原数组和一个目标数组, 给一个2d数组表示可以交换原数组的index对, 求使用这些交换后, 原数组不能成为目标数组元素的个数. 这个题是典型并查集的题, 先预装一下所有的swap, 然后再找原数组中的index是否在某个集合中, 需要注意的还有一个是因为有重复元素, 所以还需要一个map记录并查集中每个小集合中元素的频率.
给一个已经排序好的二维数组. 第一个数字表示顾客到达的时间, 第二个表示准备顾客order的时长, 求平均服务顾客的时间. 这个题就是分类讨论, 通过看例子, 知道如果前后两个人在同一时间到达, 那么后一个人的服务时间是要把给前边人准备的时间也算进去的. 然后再按照当前时间进行分类, 还是第二个例子, 能看出如果两个人不是同一时间到达, 但是两个人的准备时间不重叠, 那么只需要分别算服务时间, 如果重叠, 需要先找到上一个顾客的完成时间, 然后计算出当前顾客的服务时间, 所以还需要一个变量记录上一个顾客的完成时间.
给一个数字n, 代表天数, 从第一周开始, 每个星期第一天算1, 一共7天, 第二个星期从2开始,到8. 求n天赚多少钱
给一个链表, 给一个数组k, 求交换开始第k个node和倒数第k个node的值. 这个题我看答案是扫了三次, 我用的stack