Efficient way to count occurrences of a key in a sorted array

后端 未结 10 1644
粉色の甜心
粉色の甜心 2021-01-30 23:49

This was asked in on-site Microsoft interview.

Count the number of occurrences of a given key in an array.

I answered linear search because the elements may be s

10条回答
  •  轮回少年
    2021-01-31 00:29

    You can use recursive version of binary search

    int modifiedbinsearch_low(int* arr, int low, int high , int key)
    {   
        if(low==high) return high ; 
    
        int mid = low + (high-low) /2;
    
        if(key >  arr[mid] ) { modifiedbinsearch_low(arr,mid + 1 , high,key);  } 
        else  { modifiedbinsearch_low(arr,low,mid,key);  }  
    }
    int modifiedbinsearch_high(int* arr, int low, int high , int key)
    {   
        if(low==high) return high ; 
    
        int mid = low + (high-low) /2;
    
        if(key <  arr[mid] ) { modifiedbinsearch_high(arr,low,mid,key);  } 
        else  { modifiedbinsearch_high(arr,mid+1,high,key);  } 
    
    } 
    

    .

    int low = modifiedbinsearch_low( ...)
    
    int high = modifiedbinsearch_high( ...)
    

    (high - low) gives the number of keys

提交回复
热议问题