当前位置: 首页 > 知识库问答 >
问题:

Ruby运行时中的二和算法不会传递给LeetCode

冷正信
2023-03-14

我试图得到一个两和算法来传递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修改迭代数组,并在找到正确的目标值时返回。我更喜欢使用散列方法,因为它更具可读性,而且我不认为将数组转换为散列的时间限制太大。

共有3个答案

华子昂
2023-03-14

请参阅下面我的解决方案:它的效率更高,比所有Ruby提交的两个总和的25.43%快292毫秒,比所有Ruby提交的100%少使用9.5MB。值得一看。很简单。

def two_sum(nums, target)
    nums.each_with_index do |num,index|
       if nums.include?(target - num)
           return [index,nums.find_index(target - num)] if index != nums.find_index(target - num)
       end
    end         
end
包永新
2023-03-14

经过一段时间的思考,我意识到我是从错误的方向来处理这个问题的。我应该一个接一个地向哈希表中添加元素,每次在添加新的key:value之前检查解决方案是否存在,而不是从一开始就构建一个潜在的巨大哈希表

def two_sum(nums, target)
  numbers_hash = {}
  nums.each_with_index do |number, index|
    numbers_hash[index] = number
    hash_key = ((numbers_hash.select { |k,v| v == (target - number) }.keys) - [index])
    hash_key.empty? ? false : (return [hash_key, index].flatten)
  end
  return "Couldn't find target value"
end

这比我以前的解决方案运行得快得多。

锺博耘
2023-03-14

人们指出ternaries的问题的原因是,它通常表明您正在使一个过程过度复杂化。你在检查它是否为零。但是,在尽量减少行的使用时,会使您自己的代码更难阅读,尽管它在集成到更复杂的代码结构中时可能会“起作用”,但对您自己来说,以后阅读也绝对是一场噩梦。

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

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

 类似资料:
  • 这里是Gradle 2.14和Groovy 2.4.7。我有以下groovy:

  • 问题内容: 方法context.getBean(name,user)的文档说 允许指定显式构造函数参数/工厂方法参数 但是无论我做什么(尝试一切),使用最合理的设置在初始化期间加载Bean时都会得到以下信息: 注释说可以做到的,但是如果您在该bean的xml定义中指定构造函数参数,则失败。 问题答案: 在javadoc中说: args-在使用静态工厂方法的显式参数创建原型时使用的参数。 因此,be

  • 问题内容: 我注意到,可以将预增减运算符应用于变量(例如)。它可以编译,但实际上并不会改变变量的值! Python中预增/减运算符(++ /-)的行为是什么? 为什么Python会偏离C / C ++中看到的这些运算符的行为? 问题答案: 不是运算符。它是两个运算符。该运营商的身份运营,这什么都不做。(澄清:和一元运算符仅对数字起作用,但是我假设你不会期望假设的运算符对字符串起作用。) 解析为 转

  • 我试图将一个字符串和一个列表传递给pandas.isin()方法。下面是我的代码 这里的问题是,.isin([])对于字符串的每次迭代都很好,但是当我到达overall_months[-1]时,它是一个列表,您不能将列表传递到.isin([])语法中。我试过了,但不能删除双引号,因为我的理解是字符串是不可变的: 有什么最好的帮助来完成这件事吗?

  • 本文向大家介绍传递给SAPUI5中的方法geticon,包括了传递给SAPUI5中的方法geticon的使用技巧和注意事项,需要的朋友参考一下 SAP UI支持自定义格式器功能。formatter =“ function”用于指定在显示之前格式化单元格数据的函数。 formatter =“ function” 尝试使用格式化程序功能如下- 请参阅下面的链接以了解有关自定义格式化程序功能的更多信息-

  • 问题内容: 我希望能够在运行selenium时将参数传递给google chrome。我怎样才能做到这一点?运行selenium时,我使用Java命令Java -jar selenium.jar 如何将诸如no-sandbox,ignore-gpu-blacklist,enable-webgl之类的参数传递给google chrome可执行文件。谢谢 我正在用守夜人 问题答案: 您可以使用启动驱动