Write a program to find 100 largest numbers out of an array of 1 billion numbers

前端 未结 30 2219
深忆病人
深忆病人 2020-11-29 14:04

I recently attended an interview where I was asked \"write a program to find 100 largest numbers out of an array of 1 billion numbers.\"

I was only able to give a br

30条回答
  •  广开言路
    2020-11-29 14:42

    It's a question from Google or some else industry giants.Maybe the following code is the right answer expected by your interviewer. The time cost and space cost depend on the maximum number in the input array.For 32-Bit int array input, The maximum space cost is 4 * 125M Bytes, Time cost is 5 * Billion.

    public class TopNumber {
        public static void main(String[] args) {
            final int input[] = {2389,8922,3382,6982,5231,8934
                                ,4322,7922,6892,5224,4829,3829
                                ,6892,6872,4682,6723,8923,3492};
            //One int(4 bytes) hold 32 = 2^5 value,
            //About 4 * 125M Bytes
            //int sort[] = new int[1 << (32 - 5)];
            //Allocate small array for local test
            int sort[] = new int[1000];
            //Set all bit to 0
            for(int index = 0; index < sort.length; index++){
                sort[index] = 0;
            }
            for(int number : input){
                sort[number >>> 5] |= (1 << (number % 32));
            }
            int topNum = 0;
            outer:
            for(int index = sort.length - 1; index >= 0; index--){
                if(0 != sort[index]){
                    for(int bit = 31; bit >= 0; bit--){
                        if(0 != (sort[index] & (1 << bit))){
                            System.out.println((index << 5) + bit);
                            topNum++;
                            if(topNum >= 3){
                                break outer;
                            }
                        }
                    }
                }
            }
        }
    }
    

提交回复
热议问题