Topic:
Counts the number of occurrences of a number in a sorted array. For example input sort array {1,2,3,3,3,3,4,5} and number 3, because 3 appears in this array 4 times, so output 4.
Solution One: O (n)
Sequential traversal
Solution Two: O (LOGN)
Find the first 3, and the last 3, and then calculate the number.
#include <stdio.h>int getfirstk (int* data,int length,int k,int start,int end) {if (Start > End) re turn-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); printf ("first:%d\n", first); int Last=getlastk (DATA,LENGTH,K,0,LENGTH-1); printf ("last:%d\n", last); if (First >-1 && last >-1) number =last-first +1; } return number; } void Main () {int a[8]={1,2,3,3,3,3,4,5}; int RESULT=GETNUMBEROFK (a,8,3); printf ("%d\n", result);}
The point of a sword 38-number of occurrences in a sorted array