两道数组算法题,面试中遇到过但没在网上找到答案,求解

泻药
第一题就是hashmap统计,然后按频率排序,具体做法可以是把hashmap的kv对弄成一个列表,然后按v排序再把k还原成原列表
【两道数组算法题,面试中遇到过但没在网上找到答案,求解】 第二题就是把数组切成两份,一共有N+1种切法,对于每种切法,分别找左半部分最大/最小子数组和和右半部分最大/最小子数组和,统计差值最大的就行了

■网友
第二题先从左到右扫一遍,求出从开始到每个位置的最大(最小)和,然后再从右到左扫一遍,求出从后面到每个位置的最大(最小)和,在从右到左扫的时候就可以求出结果了。时间复杂度为O(n)。
■网友
楼上写得很清楚了,不过第一个问题还可以优化一下。如果直接对频率排序的话,时间复杂度是nlogn,但是这里可以优化到线性。开一个n+1的数组,每个数组元素是一个list,数组下标表示出现的次数。hashmap统计结束以后,把结果保存在这个数组里面,然后倒序遍历即可。这其实是一个线性复杂度的排序,应该是叫桶排序?忘了TAT
■网友
第一题可以用hashmap 统计然后value作为index ,key 作为val存入一个数组,再便利一遍数组即可


    推荐阅读