5、最短无序子数组

使用快排后经过一趟循环寻找排序后数组与之前数组不同的数字的下标。

/*比较函数*/
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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章