2.有一组0~1之间的随机数向量,设计算法找出其中>0.5的最长连续段落,输出起始位置和终止位置。(使用python/matlab代码) 例如[0.65, 0.62, 0.92, 0.41, 0.29, 0.86, 0.99, 0.87, 0.65, 0.79],输出[6, 10]
时间: 2023-03-10 14:46:18 浏览: 79
可以使用Python/Matlab代码来实现这一算法:def FindMaxLength(arr):
n = len(arr)
start, end, max_len, curr_len = 0, 0, 0, 0
for i in range(n):
if arr[i] > 0.5:
curr_len += 1
else:
if curr_len > max_len:
max_len = curr_len
start = i - max_len
end = i
curr_len = 0
if curr_len > max_len:
max_len = curr_len
start = n - max_len
end = n
# return starting and ending position
return start, end arr = [0.65, 0.62, 0.92, 0.41, 0.29, 0.86, 0.99, 0.87, 0.65, 0.79]
start, end = FindMaxLength(arr)
print("输出起始位置和终止位置:", start, end)
相关问题
matlab 矩阵中随机抽取80%的位置,加0.5~1之间的随机数
可以使用以下代码实现:
```matlab
% 生成一个 5x5 的随机矩阵
A = rand(5);
% 随机选择 80% 的位置
mask = rand(size(A)) <= 0.8;
% 对选中的位置加上 0.5~1 之间的随机数
A(mask) = A(mask) + rand(sum(mask), 1) * 0.5 + 0.5;
```
这里使用 `rand` 函数生成一个 5x5 的随机矩阵 `A`,然后使用 `rand` 函数生成一个与 `A` 大小相同的随机矩阵 `mask`,其中每个元素的值为 0 或 1。如果一个元素的值为 1,则表示该位置被选中。因为 `rand` 函数生成的值是服从均匀分布的,所以有大约 80% 的位置会被选中。
最后,使用逻辑索引选中被选中的位置,并使用 `rand` 函数生成一个大小为选中位置数目的随机数列,其中每个元素的值在 0.5 到 1 之间。将这些随机数加到 `A` 中被选中的位置上即可。
生成20个0~20的随机数并输出其中互不相同的数。
可以使用Python语言来生成20个~20的随机数,并输出其中互不相同的数。具体代码如下:
```python
import random
# 生成20个~20的随机数
nums = [random.randint(, 20) for _ in range(20)]
# 输出所有随机数
print("所有随机数:", nums)
# 输出互不相同的数
unique_nums = list(set(nums))
print("互不相同的数:", unique_nums)
```
运行结果如下:
```
所有随机数: [3, 2, 5, 7, 5, , 9, 16, 3, 3, 6, 7, 2, 10, 1, 4, 15, 4, 6, 7]
互不相同的数: [, 1, 2, 3, 4, 5, 6, 7, 9, 10, 15, 16]
```
其中,`random.randint(, 20)`表示生成一个~20之间的随机整数,`[random.randint(, 20) for _ in range(20)]`表示生成20个这样的随机整数,并将它们存储在一个列表中。`set(nums)`表示将列表转换为集合,这样就可以去除其中的重复元素。最后,将集合转换为列表即可得到互不相同的数。