gpt4 book ai didi

ruby - 为什么我的代码返回错误的索引号?

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:37 26 4
gpt4 key购买 nike

需要帮助解决这个家庭作业问题。我如何编写一个函数 nearest_larger(arr, i) ,它接受一个数组和一个索引。该函数应返回另一个索引。条件如下。谢谢。

This should satisfy:

(a) `arr[i] < arr[j]`, AND
(b) there is no `j2` closer to `i` than `j` where `arr[i] < arr[j]`.

In case of ties (see example beow), choose the earliest (left-most) of the two indices. If no number in arr is largr than arr[i], return nil.

example:

nearest_larger([2,3,4,8], 2).should == 3 end

我的代码是:

def nearest_larger(arr, idx)

greater_nums = []

arr.each {|element| greater_nums << element if element>idx}

sorted_greater_nums= greater_nums.sort

nearest_larger = sorted_greater_nums[0]

arr.index(nearest_larger)

end

非常感谢大家。解决方法见下方帖子

最佳答案

我在这里看到至少两个错误。

首先,您的代码似乎假定数组已排序。 (否则,为什么采用最少的 greater_nums 会得到最接近的索引?)但是根据您的要求(在出现平局的情况下选择最左边的索引),这显然不能保证。

更重要的是,在您的 each 循环中,您正在比较 elementidx(传入的 index ) 而不是 arr[idx]

我想你真正想做的是这样的:

def nearest_larger(arr, idx)
value = arr[idx]

# Ensure idx is actually valid.
return nil if idx < 0 || idx >= arr.length

left, right = [idx - 1, idx + 1]
while (left >= 0 || right < arr.length)
# Always check left first, per the requirement.
return left if left >= 0 && arr[left] > value
return right if right < arr.length && arr[right] > value

# Incrementally move farther and farther left/right from the specified index
# looking for a larger value.
left, right = [left - 1, right + 1]
end

# This will return nil if no values were larger than arr[idx].
end

关于ruby - 为什么我的代码返回错误的索引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595019/

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