假设我们有一个整数数组,可能包含重复的数字,我们需要随机选择给定目标数字的索引。我们可以假设给定的目标数字一定存在于数组中。例如,如果数组是 [1, 2, 3, 3, 3],那么 pick(3) 可能随机返回 2、3 或 4。为了解决这个问题,我们将遵循以下步骤:ret := -1, cnt := 1 for i in range 0 to size of v: if v[i] = target: if random number mod cnt = 0: then ret = i cnt := cnt + 1 return ret 示例 (C++)让我们看看下面的… 阅读更多
假设我们有一个正整数 n,我们可以执行以下操作:如果 n 是偶数,则将 n 替换为 n/2。如果 n 是奇数,则可以将 n 替换为 n + 1 或 n - 1。我们需要找到将 n 转换为 1 所需的最小替换次数?例如,如果数字是 7,则答案将是 4,因为 7 → 8 → 4 → 2 → 1 或 7 → 6 → 3 → 2 → 1。为了解决这个问题,我们将遵循以下步骤:ret := 0, n := x while n > 1: if… 阅读更多
假设我们有一个单链表,我们需要找到链表中一个随机节点的值。这里每个节点被选择的概率必须相同。例如,如果列表是 [1, 2, 3],那么它可以返回 1、2 和 3 范围内的随机节点。为了解决这个问题,我们将遵循以下步骤:在 getRandom() 方法中,执行以下操作:ret := -1, len := 1, v := x while v is not null: if rand() is divisible by len: then ret := val of v increase len by 1 v := next of v return ret 示例 (C++)让我们看看… 阅读更多
假设我们需要计算 a^b mod 1337,其中 a 是一个正整数,b 是一个以数组形式给出的极大的正整数。例如,如果 a = 2 且 b = [1, 0],则输出将是 1024。为了解决这个问题,我们将遵循以下步骤:定义 powerMod() 方法,它接收 base 和 powerm := 1337, ret := 1 while power is not 0: if power is odd: then ret := ret * base mod m base := base^2 mod m power := power / 2 return ret 定义 superPower(),它接收 a 和 b if size of b = 0:… 阅读更多
假设我们有一组不同的正整数,我们需要找到最大的子集,使得该子集中的每一对 (Si, Sj) 元素都满足:Si mod Sj = 0 或 Sj mod Si = 0。例如,如果输入是 [1, 2, 3],则可能的结果可能是 [1, 2] 或 [1, 3]。为了解决这个问题,我们将遵循以下步骤:创建一个数组 ret,设置 endpoint := 0,retLen := 1,n := num 的大小 if n is 0: then return empty set sort nums array create two arrays len and par of size n, initialize… 阅读更多
假设我们有两个容量分别为 x 和 y 升的水壶。我们有无限量的可用水。现在我们需要确定是否可以使用这两个水壶精确测量 z 升水。如果 z 升水是可测量的,那么到最后我们必须在一个或两个水桶中都含有 z 升水。我们可以执行以下几个操作:用水将任何一个水壶装满。清空任何一个水壶。将水从一个水壶倒入另一个水壶,直到另一个水壶完全装满或第一个水壶本身为空。所以… 阅读更多