📅  最后修改于: 2023-12-03 14:58:43.526000             🧑  作者: Mango
给定一个长度为 n 的整数数组 nums,你的任务是统计出需要重新排列的不同排序子数组的数量。两个子数组被认为不同的条件是其在原数组中的起始和结束位置不同。换句话说,若两个子数组中的某个数字在原数组中的位置不同,那么这两个子数组就是不同的。
首先,对数组进行排序,将原数组排序后与原数组对比,一次遍历,当两个数组元素不同时记录当前位置,待遍历完成后根据这些位置计算需要重新排列的子数组的数量。
def rearrange_arr(nums):
sorted_nums = sorted(nums)
start, end = None, None
res = 0
for i in range(len(nums)):
if nums[i] != sorted_nums[i]:
if start is None:
start = i
end = i
else:
if start is not None:
res += 1
start, end = None, None
if start is not None:
res += 1
return res
本算法中使用了一次排序,最坏情况下时间复杂度为O(nlogn)。再遍历一次数组,时间复杂度为O(n)。因此,整个算法时间复杂度为O(nlogn+n)=O(nlogn)。空间复杂度为O(n),用来存储排好序的数组。