使用快排後經過一趟循環尋找排序後數組與之前數組不同的數字的下標。
/*比較函數*/
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);
}