gpt4 book ai didi

python - 未排序的二进制数组中第一次出现 1

转载 作者:行者123 更新时间:2023-12-04 03:29:05 25 4
gpt4 key购买 nike

我正在解决一个问题,在未排序的 1 和 0 数组中找到第一个 1。如果找到任何 1,程序应返回索引,否则返回 -1。我想对这个问题有分而治之的解决方案,但我正在为基本情况而苦苦挣扎。

def first_one(A):
n = len(A)
leftmost = 0
if n <= 1:
# probably would be when n <=1 ? I was returning 0 if A[0] == 1 or n otherwise
# but this lead to the final result always being determined by the first index.

idx_left = first_one(A[:int(n/2)])
idx_right = first_one(A[int(n/2):])
result = min(idx_left, idx_right)
if result == n:
return -1
else:
return result

那么我的基本情况应该是什么——始终检索实际的第一个索引而不是 0(或 -1)?我想不出任何其他基本案例。

最佳答案

您遇到的问题是您不记得后续调用中数组的开头。要缓解此问题,您必须在原始数组中保留有关当前位置的信息。我要么将数组的起始索引添加到调用结果中,要么在每次调用时只传递子数组的“位置”。

您在问题末尾提出的基本情况应该没问题;)由于并行处理,嵌套时间请明确说明您想要“分而治之”的解决方案。它将阻止提出更简单的顺序解决方案。

使用分而治之的示例解决方案:

def first_one(A):
if len(A) == 0:
return -1

return first_one_subarray(A, 0, len(A) - 1)

def first_one_subarray(A, start, end):
# Incorrect subarray
if start > end or start > len(A) - 1:
return -1

# Check if 1 is on 'first' position
if A[start] == 1:
return start

# Divide into two parts
split_point = max(start + 1, round(end / 2))
result_left = first_one_subarray(A, start + 1, split_point)
result_right = first_one_subarray(A, split_point + 1, end)

if result_left != -1:
return result_left
else:
return result_right

关于python - 未排序的二进制数组中第一次出现 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67191381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com