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);
}

 

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