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

后端 未结 10 1546
粉色の甜心
粉色の甜心 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:34

    We can solve this using Linear as well as Binary Search. But Linear Search will be O(n). Binary Search will give O(Logn). Hence it's better to use Binary search. The complete program is :

    public class Test4 {
    public static void main(String[] args) {
         int a[] = {1, 2, 2, 3, 3, 3, 6,6,6,6,6,66,7}; 
         int x =  6; 
    
             System.out.println(fix(a,x));
    }
    
    private static int fix(int[] a, int x) {
        int res = 0 ;
    
        for (int i = 0; i < a.length; i++) {
            int ch = a[i];
            if(x == ch) {res++ ;}
        }
        return res;
    }
    }
    

    There is another follow up question that's asked is : 1st and last occurence of a given number in a sorted array.

    class Occurence1 {
    
        public static void findFirstAndLast(int a[], int x) {
    
            int first = -1, last = -1;
            for (int i = 0; i < a.length; i++) {
                if (x == a[i]) {
                    if (first == -1) {
                        first = i;
                    }
                    // update last
                    last = i;
                } // if
    
            } // for                                                                           
            if (first != -1) {
                System.out.println("First Occurrence = " + first);
                System.out.println("Last Occurrence = " + last);
            } 
        }// end1
    
        public static void main(String[] args) {
            int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };
            int x = 8;
            findFirstAndLast(arr, x);
        }
    }
    

    In Python :

    def findFirstAndLast(a, x):
        first = -1 ; last = -1
        for i in range(len(a)) :
            if(x == a[i]): 
                if(first == -1):first = i 
    
             # update last if the first contains oter value than -1    
            last = i
    
        if(first != -1):
            print("first => ",first)
            print("last =>", last)       
    
    
    a = [1, 2, 3,4, 5, 6, 7, 8, 1, 10, 10]
    x = 10
    findFirstAndLast(a, x)
    

提交回复
热议问题