使用快排后经过一趟循环寻找排序后数组与之前数组不同的数字的下标。
/*比较函数*/
int compare(const void *p1,const void *p2)
{
return *(int *)p1 - *(int *)p2;
}
int findUnsortedSubarray(int* nums, int numsSize){
int *tmp;
tmp = (int *)malloc(sizeof(int)*numsSize);
memcpy(tmp,nums,sizeof(int)*numsSize); //从nums复制n个字节到tmp
qsort(tmp,numsSize,sizeof(tmp[0]),compare); //快排函数
int start = numsSize,end = 0;
for(int i = 0;i < numsSize;i++)
{
if(nums[i] != tmp[i])
{
if(i <= start)
start = i;
if(i >= end)
end = i;
}
}
return (end - start >= 0?end - start+1 : 0);
}