【问题标题】:Problem with checking logical within for loop在 for 循环中检查逻辑问题
【发布时间】:2022-01-04 22:52:58
【问题描述】:

受到leetcode challenge 两个总和的启发,我想在 R 中解决它。但是在尝试通过蛮力解决它时,我的 for 循环遇到了问题。

所以基本思想是给定一个整数向量,向量中的两个整数相加为一个设定的目标整数。

首先我创建 10000 个整数:

set.seed(1234)
n_numbers <- 10000
nums <- sample(-10^4:10^4, n_numbers, replace = FALSE)

我在 for 循环中执行了一个 for 循环来检查每个元素是否相互。

# ensure that it is actually solvable
target <- nums[11] + nums[111]


test <- 0
for (i in 1:(length(nums)-1)) {
  for (j in 1:(length(nums)-1)) {
    j <- j + 1
    test <- nums[i] + nums[j]
    if (test == target) {
      print(i)
      print(j)
      break
    }
  }
}

我的问题是它在达到 test == 目标的正确条件之前就开始疯狂打印数字。而且我似乎无法弄清楚为什么。

【问题讨论】:

  • 我不知道你在说什么。当我运行它时,它(正确地)打印出匹配项。在这个随机样本中,有 1058 次出现,其中一个 nums 加上另一个 nums 等于 target。你在期待什么?
  • 抱歉,我希望它在第一次比赛后停止,因此中断。

标签: r for-loop


【解决方案1】:

我认为您的代码存在几个问题:

首先,您不必手动增加j,您可以在for 语句中执行此操作。因此,如果您真的想在每一步中将 j 增加 1,您可以编写:

 for (j in 2:(length(nums))) 

其次,您只破坏了 for 循环的内循环。查看此处Breaking out of nested loops in R 了解更多信息。

第三,nums 中有几个条目给出了“正确”的结果target。因此,您的 if 条件运行良好并打印出所有等于 targetnums[i]+nums[j] 组合。

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 2018-11-13
    • 2014-08-15
    • 2012-02-24
    • 1970-01-01
    • 2013-07-26
    • 2011-06-19
    • 2010-10-13
    相关资源
    最近更新 更多