gpt4 book ai didi

clojure - 3Sum 在 Clojure 中使用 for

转载 作者:行者123 更新时间:2023-12-02 06:28:51 25 4
gpt4 key购买 nike

我有这个经典的算法练习:这个数组中有多少个三元组和为零?用 Java 实现这个没问题:

int count = 0;
for (int i = 0; i < array.length - 2; i++) {
(for int j= i+1; j < array.length -1; j++) {
(for int k = j + 1; k < array.length; k++) {
if (array[i] + array[j] + array[k] == 0) {
count++;
}
}
}
}
return count;

不过,我将如何在 Clojure 中做到这一点?我问自己:如何在 Clojure 中进行嵌套循环。

但是this question and answer并没有真正解决我的问题,因为它需要两个相同的数组并组合所有元素(也是相同的元素,例如 1 和 1)。

相关问题:如何从集合中获取所有三元组的组合?

注意:我们被明确要求不要对数组进行排序。我知道有更快的算法。

编辑:在条件中添加了“== 0”。

最佳答案

你也可以用列表推导来做到这一点,根本不需要操作索引:

user> (def data [1 -2 1 1 -3 2])
#'user/data

user> (defn tails [data]
(take-while seq (iterate rest data)))
#'user/tails

user> (for [[x & xs] (tails data)
[y & ys] (tails xs)
[z] (tails ys)
:when (zero? (+ x y z))]
[x y z])

;;=> ([1 -2 1] [1 -2 1] [1 -3 2] [-2 1 1] [1 -3 2] [1 -3 2])

关于clojure - 3Sum 在 Clojure 中使用 for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46357937/

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