#算法題
#有兩個數組, 要從數組中隨機獲取數據3個數據, 3個數據不能來自同一個數組
#請問如何寫?
我们把计算机的内存想象成一大片格子,每个格子都只能存放1、0中的一个数,这样一个单独的格子就叫“位”。多个位连在一起就组成字节,一般计算机上一个字节由八个位组成。
单个格子能存储的信息非常有限,只有0或1。然而当我们把多个格子,也就是位连在一起并且赋予这些位某种意义的时候,这些位就能表示大量信息。比如我们考虑八个连在一起的位,将这些位称作长度为8的位向量 =
,就可以表示数集{7,6,...0}的任何子集E。当
时,令
,利用这种编码方式,就可以用位向量[0,0,0,1,0,1,0,0]表示数集{2,4}。
问题回答:
从一个数组中随机获取一个元素,可以采用以下方法:
import random
arr = [1, 2, 3, 4, 5]
random_elem = random.choice(arr)
print(random_elem)
其中,random模块中的choice()
函数可以从非空序列中随机地返回一个元素。该方法的时间复杂度为O(1)。
如果要对该方法进行封装,可以这样写:
import random
def get_random_elem(arr):
if not arr:
return None
return random.choice(arr)
其中,not arr
表示判断arr是否为空序列,如果为空,直接返回None。该方法的时间复杂度也为O(1)。
需要注意的是,如果是需要进行多次随机操作,建议先将原数组打乱,然后再进行随机操作,这样可以保证获取的元素随机性更高。打乱数组可以使用random模块中的shuffle()
函数:
import random
def get_random_elem(arr):
if not arr:
return None
random.shuffle(arr)
return arr[0]
其中,shuffle()
函数可以将序列x中元素顺序打乱。
没说什么语言,就用python写一个给你
import random
array1 = [1, 2, 3, 4, 5]
array2 = [6, 7, 8, 9, 10]
random_value_1 = random.choice(array1)
random_value_2 = random.choice(array2)
random_value_3 = random.choice(array1)
if (random_value_1 in array1 and random_value_2 in array1 and random_value_3 in array1) or (random_value_1 in array2 and random_value_2 in array2 and random_value_3 in array2):
random_value_3 = random.choice([value for value in array1+array2 if value not in [random_value_1, random_value_2]])
print(random_value_1, random_value_2, random_value_3)
import random
# 定义两个数组
array1 = [1, 2, 3, 4, 5]
array2 = [6, 7, 8, 9, 10]
# 从两个数组中各随机选择一个数
selected1 = random.choice(array1)
selected2 = random.choice(array2)
# 从未被选中的数组中随机选择两个数
array3 = array1 if selected2 in array1 else array2
selected3 = random.choice([x for x in array3 if x != selected1 and x != selected2])
selected4 = random.choice([x for x in array3 if x != selected1 and x != selected2 and x != selected3])
# 输出结果
print(selected1, selected2, selected3, selected4)
这个方案首先从两个数组中各随机选择一个数,然后根据已经选择的数确定一个数组作为备选数组,从备选数组中随机选择两个数。注意,在从备选数组中选择数的时候需要排除已经被选择的数。最终输出选择的四个数。
这个方案的时间复杂度为 O(n),其中 n 是数组的长度。