The question is obviously too difficult to be answered analytically, at least in a job interview. What it's not so difficult is to design an algorithm to evaluate the answer numerically. (Perhaps that was the idea in the interview?)
An equivalent formulation: we have $N$ balls with weights $p_1, p_2 \cdots p_N$. We extract the balls without replacement, with probabilities equal to their normalized weights. We want $P_{j,t}$, the probability that, after $t$ extrations, ball $j$ has not been yet extracted.
In particular, $P_{j,0}=1$, $P_{j,N}=0$,$P_{j,1}=1-p_j$,
To get the idea, suppose $t=3$, $j=N$. Then to get $P_{j,t}$ we need to sum over all the probabilities of the length $3$ extraction starting subsequences that don't include $j=N$. For example, (assuming normalized initial weighs) the subsequence $(1,2,3\cdots )$ would have probability
$$ p_1 \frac{p_2}{1-p_1} \frac{p_3}{1-p_1-p_2} $$
and so on.
Then $${P_{j,t}= \sum_{\sigma \in {\mathbb P}_{N,t,j} } \prod_{i=1}^t \frac{p_{\sigma_i}}{\left(1- \sum_{k=1}^{i-1} p_{\sigma_k} \right)}}$$
where ${\mathbb P}_{N,t,j} $ denotes all the permutations of $t$ elements, taken from the set $\{1, 2 \cdots N \}$ with element $j$ excluded.
The sum over such permutations can be concisely computed by recursion.
For example, in Java:
public class Balls {
// not necessarily normalized
final static double prob[] = { 0.3, 0.2, 0.2, 0.15, 0.1, 0.05 };
final static int N = prob.length;
/**
* Computes probabiity that element j (j=0..N-1, same index as in prob array)
* does not appear in the first pos positions
* computeProb(element, 0) = 1
* computeProb(element, 1) = 1-p_j
* computeProb(element, N) = 0
*/
public static double computeProb(int j, int pos) {
normalize(prob);
double[] p0 = removeAndNormalize(prob, j, false);
return allPermutations(p0, pos);
}
static double allPermutations(double p[], int depth) {
double ac = 0;
if( depth <= 0 ) return 1;
for( int i = 0; i < p.length; i++ )
ac += p[i] * allPermutations(removeAndNormalize(p, i, true), depth - 1);
return ac;
}
// normalizes probabities in place
static void normalize(double[] list) {
double ac = 0;
for( double px : list ) ac += px;
for( int i = 0; i < list.length; i++ ) list[i] /= ac;
}
// removes element of array, and optionally normalizes
// original (untouched) must be already normalized
static double[] removeAndNormalize(double p[], int index, boolean normalize) {
double[] q = new double[p.length - 1];
for( int i = 0, j = 0; i < q.length; i++, j++ ) {
if( i == index ) j++;
q[i] = normalize ? p[j] / (1 - p[index]) : p[j];
}
return q;
}
For example, here's some results for $N=6$
prob=[0.3, 0.2, 0.2, 0.15, 0.1, 0.05]
t=0 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000
t=1 0.70000 0.80000 0.80000 0.85000 0.90000 0.95000
t=2 0.44794 0.59624 0.59624 0.68615 0.78423 0.88919
t=3 0.24803 0.39457 0.39457 0.50573 0.64561 0.81148
t=4 0.10545 0.20779 0.20779 0.30642 0.46950 0.70305
t=5 0.02477 0.06330 0.06330 0.11122 0.21732 0.52009
prob=[60.0, 5.0, 4.0, 3.0, 2.0, 0.1]
t=0 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000
t=1 0.19028 0.93252 0.94602 0.95951 0.97301 0.99865
t=2 0.02777 0.63673 0.70856 0.78082 0.85349 0.99264
t=3 0.00277 0.34721 0.43412 0.54870 0.68413 0.98307
t=4 0.00014 0.12570 0.18124 0.27503 0.45035 0.96754
t=5 0.00000 0.00568 0.00942 0.01701 0.03533 0.93256
In IdeOne, so you can play with it.