如何解决涉及传入数字或字符流的问题
How to solve questions involving incoming stream of numbers or characters
我遇到过很多面试问题,其中输入是以传入的数字或字符流的形式出现的。例如:
1. 找出传入数字流的中位数。
2. Select 来自传入流的随机数。
所以说它是传入流而不是说你有这些数字开头有什么意义?
它可能意味着几件事:
元素个数太多,无法全部保存在主存中。而且你不知道有多少人。
每个元素只能处理一次。当我们得到一个数字数组时,我们可以遍历它几次。流不是这种情况。
结合 1. 和 2. 可以使问题变得更难。有时这使得无法获得准确的答案。例如,找到数组的中位数非常简单。然而,在一般情况下,在任意数字流中找到一个精确的中位数是不可能的(当然,如果我们不能将它们全部保存在主内存中)。不过,估计还是可以的。再举个例子:从一个流中选择一个随机数,使得每个元素被选中的概率都相同(这里有一个精确的解决方案,说的不是很明显)。同样,数组很容易。
综上所述,流通常意味着你只能看到每个元素一次,并且不能将它们全部存储在主内存中,这使得很多问题变得更加困难。
我遇到过很多面试问题,其中输入是以传入的数字或字符流的形式出现的。例如: 1. 找出传入数字流的中位数。 2. Select 来自传入流的随机数。
所以说它是传入流而不是说你有这些数字开头有什么意义?
它可能意味着几件事:
元素个数太多,无法全部保存在主存中。而且你不知道有多少人。
每个元素只能处理一次。当我们得到一个数字数组时,我们可以遍历它几次。流不是这种情况。
结合 1. 和 2. 可以使问题变得更难。有时这使得无法获得准确的答案。例如,找到数组的中位数非常简单。然而,在一般情况下,在任意数字流中找到一个精确的中位数是不可能的(当然,如果我们不能将它们全部保存在主内存中)。不过,估计还是可以的。再举个例子:从一个流中选择一个随机数,使得每个元素被选中的概率都相同(这里有一个精确的解决方案,说的不是很明显)。同样,数组很容易。
综上所述,流通常意味着你只能看到每个元素一次,并且不能将它们全部存储在主内存中,这使得很多问题变得更加困难。