Related
In following contests:
No testdata at current.
由于需要我们查找连续数字,因此,我们需要对给定的数组进行排序,这样我们判断两个数字连续只需要判断arr[i]−arr[i−1]==1即可.
那么我们可以对于每一个数字arr[i]都以它本身编号i为起始编号,不断向后查找求得最长长度,时间复杂度为O(n2).这个时间复杂度可以优化.我们发现假设i为起始编号对应最长长度为cnt(cnt>1),那么i+1为起始编号时,最长长度肯定是cnt−1.因此,我们一旦发现最长长度cnt大于1时,那么后续的cnt−1个数都不需要寻找最长长度,因为必定小于cnt.
按照上面的思路,我们假设i为起始编号时,对应最长长度为cnt.此时,下一步我们需要判断的下标就可以为i+cnt,其中[i+1,i+cnt−1]的下标都不需要判断最长长度.所以总的时间复杂度为O(n),因为每个点都只会被所有循环加起来枚举到一次.
In following contests:
本题属于以下题库,请选择所需题库进行购买