數組隨機獲取元素算法問題

#算法題

#有兩個數組, 要從數組中隨機獲取數據3個數據, 3個數據不能來自同一個數組

#請問如何寫?

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7448723
  • 你也可以参考下这篇文章:递减剔除数组元素算法
  • 除此之外, 这篇博客: 计算机怎么实现减法?中的 位和字节 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们把计算机的内存想象成一大片格子,每个格子都只能存放1、0中的一个数,这样一个单独的格子就叫“位”。多个位连在一起就组成字节,一般计算机上一个字节由八个位组成。

    单个格子能存储的信息非常有限,只有0或1。然而当我们把多个格子,也就是位连在一起并且赋予这些位某种意义的时候,这些位就能表示大量信息。比如我们考虑八个连在一起的位,将这些位称作长度为8的位向量\underset{x}{\rightarrow} = [x_{7},x_{6},...,x_{0}],就可以表示数集{7,6,...0}的任何子集E。当i \epsilon E时,令x_{i} = 1,利用这种编码方式,就可以用位向量[0,0,0,1,0,1,0,0]表示数集{2,4}。

  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 红黑树的特征推导 小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题回答:

    从一个数组中随机获取一个元素,可以采用以下方法:

    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写一个给你

img

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 是数组的长度。