ruby - Picking Numbers - 在 Ruby 中解决 Hacker Rank 挑战
问题描述
问题说明
给定一个整数数组,找到任意两个元素之间的绝对差小于或等于 1 的最长子数组。
示例 a = [1,1,2,2,4,4,5,5,5] 有两个子数组满足条件:[1,1,2,2] 和 [4,4,5,5,5 ]。最大长度子数组有 5 个元素。
PickNumbers 具有以下参数:
- int a[n]:整数数组
退货
- int:满足条件的最长子数组的长度
我试过的
def pickingNumbers(a)
# Write your code here
a.sort!
current_counter = 0
max_counter = 0
i = 0
while i < a.size
j = 1
while (a[j].to_int - a[i].to_int) <= 1
current_counter += 1
j += 1
max_counter = current_counter if current_counter > max_counter
end
i+=1
end
max_counter
end
input = [1,1,2,2,4,4,5,5,5]
pickingNumbers(input)
要求:
为什么上面的代码不起作用?如果有人可以解释,我将不胜感激。我正在学习解决算法挑战,我知道有很多更好的解决方案。不过,我想知道为什么这段代码不起作用!))提前致谢
解决方案
您正在检查以确保i < a.size
,但您没有对j
.
最终,您将 j 增加到超出数组的大小并尝试访问a[9]
返回 nil 的值。
nil.to_int
导致错误(尽管您实际上并未说明您在问题中看到的错误)。
在 Ruby 中遍历数组的更惯用.each
的方法是使用它来避免此类错误。
我还建议不要.sort!
在您传入的参数上使用。最后的!
bang 运算符警告您这正在修改原始数组。
推荐阅读
- c# - 如何在 WPF 中为文本框制作工具提示,使用 C# 而不是 XAML
- java - 是否存在具有“读取您的写入”保证和频繁更改数据的异步更新传播的嵌入式复制地图解决方案?
- python-3.x - 如何使用 Python 从 acoustID 获取曲目元数据
- gcc - VSCODE 的问题包括使用英特尔 IPP libarays
- python - 如何将列表/字符串中的单词数添加到计数器?
- reactjs - 不同生产版本的配置文件 React
- python - cv2 的自动完成功能在 vscode 中无法正常工作
- python - 用 PySpark 替换多个值
- arrays - 使用 XSLT 1.0 的数组
- configuration - ansible 基础设施即代码:从配置文件中创建、更新、删除用户