数字在排序数组中出现的次数

来源:互联网 发布:蚁群算法基本思想 编辑:程序博客网 时间:2024/06/12 07:14

代码:

#include <iostream>using namespace std;//找到第一个k的下标int GetFirstIndex(int* pArray,int k, int start, int end){    int mid = 0;                                              while (start <= end)    {        mid = (start + end) / 2;        if (pArray[mid] == k)        {            if (mid == 0 || (mid > 0 && pArray[mid - 1] != k))                return mid;            else                end = mid - 1;        }           else if (pArray[mid] < k)        {             start= mid + 1;        }        else        {            end = mid - 1;        }    }    return -1;}//找到最后一个k的下标int GetLastIndex(int* pArray, int k, int start, int end){    int mid = 0;    int len = end;    while (start <= end)    {        mid = (start + end) / 2;        if (pArray[mid] == k)        {            if ((mid < len && pArray[mid + 1] != k) || mid == len)                return mid;            else                start = mid + 1;        }        else if (pArray[mid] < k)        {            start = mid + 1;        }        else        {            end = mid - 1;        }    }    return -1;}int main(){    int pArray[] = { 1, 2, 3, 3, 3, 3, 4, 5 };    int nLength = sizeof(pArray) / sizeof(pArray[0]);    int k;    cin >> k;    int index1 = GetFirstIndex(pArray, k, 0, nLength - 1);    int index2 = GetLastIndex(pArray, k, 0, nLength - 1);    if (index2 >= 0 && index1 >= 0)        cout << "数字" << k << "出现次数: " << index2 - index1 + 1 << endl;    cout << endl;    system("pause");    return 0;}

测试:

这里写图片描述

0 0
原创粉丝点击