您的位置:首页 > 其它

算法题目---数字在排序数组中出现的次数

2017-08-03 09:20 369 查看
统计一个数字在排序数组中出现的次数。

int GetFirstK(int* data,int length,int k,int start,int end)

{

    if(start > end)

        return -1;

    

    int middleIndex = (start + end) / 2;

    int middleData = data[middleIndex];

    if(middleData == k)

    {

        if((middleIndex > 0 && data[middleIndex - 1] != k) || middleIndex == 0)

            return middleIndex;

        else

            end = middleIndex-1;

    }

    else if(middleData > k)

        end = middleIndex - 1;

    else

        start = middleIndex +1 ;

    

    return GetFirstK(data,length,k,start,end);

}

int GetLastK(int* data,int length,int k,int start,int end)

{

    if(start > end)

        return -1;

    

    int middleIndex = (start + end) / 2 ;

    int middleData = data[middleIndex];

    if(middleData == k)

    {

        if((middleIndex < length - 1 && data[middleIndex + 1] != k) || middleIndex == length -1 )

            return middleIndex;

        else

            start = middleIndex + 1;

    }

    else if(middleData < k)

        start = middleIndex +1 ;

    else

        end = middleIndex - 1;

    

    return GetLastK(data,length,k,start,end);

}

int GetNumberOfK(int* data,int length,int k)

{

    int number = 0;

    

    if(data != NULL && length > 0)

    {

        int first = GetFirstK(data,length,k,0,length-1);

        int end = GetLastK(data,length,k,0,length-1);

        

        if(first > -1 && end > -1)

            number = end - first +1;

    }

    return number;

}

void Test(char* testName, int data[], int length, int k, int expected)

{

    if(testName != NULL)

        printf("%s begins: ", testName);

    int result = GetNumberOfK(data, length, k);

    if(result == expected)

        printf("Passed.\n");

    else

        printf("Failed.\n");

}

void Test1()

{

    int data[] = {1, 2, 3, 3, 3, 3, 4, 5};

    Test("Test1", data, sizeof(data) / sizeof(int), 3, 4);

}

void Test2()

{

    int data[] = {3, 3, 3, 3, 4, 5};

    Test("Test2", data, sizeof(data) / sizeof(int), 3, 4);

}

void Test3()

{

    int data[] = {1, 2, 3, 3, 3, 3};

    Test("Test3", data, sizeof(data) / sizeof(int), 3, 4);

}

void Test4()

{

    int data[] = {1, 3, 3, 3, 3, 4, 5};

    Test("Test4", data, sizeof(data) / sizeof(int), 2, 0);

}

void Test5()

{

    int data[] = {1, 3, 3, 3, 3, 4, 5};

    Test("Test5", data, sizeof(data) / sizeof(int), 0, 0);

}

void Test6()

{

    int data[] = {1, 3, 3, 3, 3, 4, 5};

    Test("Test6", data, sizeof(data) / sizeof(int), 6, 0);

}

void Test7()

{

    int data[] = {3, 3, 3, 3};

    Test("Test7", data, sizeof(data) / sizeof(int), 3, 4);

}

void Test8()

{

    int data[] = {3, 3, 3, 3};

    Test("Test8", data, sizeof(data) / sizeof(int), 4, 0);

}

void Test9()

{

    int data[] = {3};

    Test("Test9", data, sizeof(data) / sizeof(int), 3, 1);

}

void Test10()

{

    int data[] = {3};

    Test("Test10", data, sizeof(data) / sizeof(int), 4, 0);

}

void Test11()

{

    Test("Test11", NULL, 0, 0, 0);

}

int main()

{

    Test1();

    Test2();

    Test3();

    Test4();

    Test5();

    Test6();

    Test7();

    Test8();

    Test9();

    Test10();

    Test11();

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐