gpt4 book ai didi

ruby - Ruby 运行时中的两个求和算法不会通过 LeetCode

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

我试图让一个二和算法通过 LeetCode,但遇到时间限制导致它失败。

我不确定如何让我的代码更快地通过。在这个问题中,我得到了一个整数数组 (nums) 和一个目标值,nums 数组中的两个数字必须相加。找到这些数字后,以数组的形式返回它们的索引值。

def two_sum(nums, target)
numbers_hash = Hash[(0...nums.size).zip(nums)]
numbers_hash.delete_if do |k, v|
key_indicies = ((numbers_hash.select { |ki,vi| vi == (target - v) }.keys) - [k])
key_indicies.empty? ? true : (return [k, key_indicies].flatten)
end
return "Couldn't find target value"
end

我可以保留原始的 nums 数组,并在使用 delete_if 的循环中执行一个循环,以修改迭代数组并在找到正确的目标值时返回。我更愿意使用散列方法,因为它更具可读性,而且我认为将数组转换为散列的时间限制不多。

最佳答案

人们之所以指出三元组的问题,是因为它通常表明您使过程过于复杂。您正在检查它是否为零。但是,在尝试尽量减少行的使用时,您会使自己的代码更难阅读,虽然当集成到更复杂的代码结构中时它可能“有效”,但以后阅读甚至对您自己来说绝对是一场噩梦。

def two_sum(nums, target)
search = {}
nums.each_with_index do |num,i|
return [search[target-num], i] unless search[target-num].nil?
search[num] = i
end
end

比这个更容易理解和稍后回顾:

def two_sum(a,g)s={};a.each_with_index{|n,i|s[g-n]==nil ?s[n]=i:(return[s[g-n],i])}end

尽管如此,它们本质上是完全相同的。

关于ruby - Ruby 运行时中的两个求和算法不会通过 LeetCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066042/

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