题面描述
在本题中,要求实现一个动态内存管理模块的内存块合并功能。当用户释放一组内存块(如“2,4,3,7,6”)后,系统需返回当前最大的连续可用内存块的起始编号和长度。如果多个最大连续内存块存在,需返回起始编号最小的那个。通过对释放的内存块进行排序和合并,最终输出一个包含起始位置和长度的元组(例如“2,3”),表示从编号2开始的长度为3的连续内存块是最大的。
思路
由于需要我们查找连续数字,因此,我们需要对给定的数组进行排序,这样我们判断两个数字连续只需要判断arr[i]−arr[i−1]==1即可.
那么我们可以对于每一个数字arr[i]都以它本身编号i为起始编号,不断向后查找求得最长长度,时间复杂度为O(n2).这个时间复杂度可以优化.我们发现假设i为起始编号对应最长长度为cnt(cnt>1),那么i+1为起始编号时,最长长度肯定是cnt−1.