編程演算法 - 數字在排序數組中出現的次數 代碼(C)

來源:互聯網
上載者:User

標籤:mystra   編程演算法   數字在排序數組中出現的次數   代碼   c   

數字在排序數組中出現的次數 代碼(C)


本文地址: http://blog.csdn.net/caroline_wendy


題目: 統計一個數字在排序數組中出現的次數.


通過折半尋找, 找到首次出現的位置, 再找到末次出現的位置, 相減即可.

時間複雜度O(logn).


代碼:

/* * main.cpp * *  Created on: 2014.6.12 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>#include <stdlib.h>#include <string.h>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;elseend = middleIndex-1;} else if (middleData>k)end = middleIndex-1;elsestart = 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;elsestart = middleIndex+1;} else if (middleData < k)start = middleIndex+1;elseend = 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)return number;int first = GetFirstK(data, length, k, 0, length-1);int last = GetLastK(data, length, k, 0, length-1);if (first > -1 && last > -1)number = last-first+1;return number;}int main(void){int data[] = {1, 2, 3, 3, 3, 3, 4, 5};int k = 3;int result = GetNumberOfK(data, 8, k);printf("result = %d\n", result);    return 0;}

輸出:

result = 4





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.