Easy interview question got harder: given numbers 1..100, find the missing number(s) given exactly k are missing

前端 未结 30 2032
时光说笑
时光说笑 2020-11-22 07:02

I had an interesting job interview experience a while back. The question started really easy:

Q1: We have a bag containing numbers

30条回答
  •  忘掉有多难
    2020-11-22 07:55

    I think this can be done without any complex mathematical equations and theories. Below is a proposal for an in place and O(2n) time complexity solution:

    Input form assumptions :

    # of numbers in bag = n

    # of missing numbers = k

    The numbers in the bag are represented by an array of length n

    Length of input array for the algo = n

    Missing entries in the array (numbers taken out of the bag) are replaced by the value of the first element in the array.

    Eg. Initially bag looks like [2,9,3,7,8,6,4,5,1,10]. If 4 is taken out, value of 4 will become 2 (the first element of the array). Therefore after taking 4 out the bag will look like [2,9,3,7,8,6,2,5,1,10]

    The key to this solution is to tag the INDEX of a visited number by negating the value at that INDEX as the array is traversed.

        IEnumerable GetMissingNumbers(int[] arrayOfNumbers)
        {
            List missingNumbers = new List();
            int arrayLength = arrayOfNumbers.Length;
    
            //First Pass
            for (int i = 0; i < arrayLength; i++)
            {
                int index = Math.Abs(arrayOfNumbers[i]) - 1;
                if (index > -1)
                {
                    arrayOfNumbers[index] = Math.Abs(arrayOfNumbers[index]) * -1; //Marking the visited indexes
                }
            }
    
            //Second Pass to get missing numbers
            for (int i = 0; i < arrayLength; i++)
            {                
                //If this index is unvisited, means this is a missing number
                if (arrayOfNumbers[i] > 0)
                {
                    missingNumbers.Add(i + 1);
                }
            }
    
            return missingNumbers;
        }
    

提交回复
热议问题