Ocaml 我怎样才能勾选“两个”;“指针”;在浏览列表时彼此见面?
例如,我有一个列表Ocaml 我怎样才能勾选“两个”;“指针”;在浏览列表时彼此见面?,ocaml,Ocaml,例如,我有一个列表[1;2;1;3;2;4;1;5;6;8;…]。列表中有重复的元素 然后,我们通过两个虚拟指针浏览列表 一个指针a从开头开始,速度为2 另一个指针 b>代码>从列表中间的某个地方开始,其速度为 1 >代码> < /p> 那么如何检查a是否与b会面 例如: a从[1;2;1;3;2;4;1;5;6;8;开始] b从索引1开始,即[2;1;3;2;4;1;5;6;8;…] 因此,在一次移动之后,a和b将到达索引2,并且它们相遇 如何仅通过元素检查是否满足要求,而不使用索引信息 我
[1;2;1;3;2;4;1;5;6;8;…]
。列表中有重复的元素
然后,我们通过两个虚拟指针浏览列表
一个指针a
从开头开始,速度为2
另一个指针<代码> b>代码>从列表中间的某个地方开始,其速度为<代码> 1 >代码> < /p> 那么如何检查
a
是否与b
会面
例如:
a
从[1;2;1;3;2;4;1;5;6;8;开始]
b
从索引1
开始,即[2;1;3;2;4;1;5;6;8;…]
因此,在一次移动之后,a
和b
将到达索引2
,并且它们相遇
如何仅通过元素检查是否满足要求,而不使用索引信息
我们可以比较这两个元素的值,因为里面可能有重复项
就守则而言:
let l = [1; 2; 1; 3; 2; 4; 1; 5; 6; 8;...]
let find_middle_start l n =
let rec aux i = function
| [] -> []
| _::tl when i >= n -> tl
| _::tl -> aux (i+1) tl
in
aux 0 l
let parallel_travel l =
Random.self_init();
let b_start = find_middle_start l (Random.int (List.length l)) in
let rec go = function
| [], _::_ | _::_, [] | _::[], _::_ -> print_endline "Never meet"
| x::x1::xs, y::ys ->
if check_meet x y then print_endline "Meet"
else go xs ys
in
go l b_start
我如何执行
check\u meet
?我不能只做x==y
对吗?绑定列表,并按标识(与=
进行比较)
请注意,如果您试图确定一个列表是否与另一个列表共享尾部,此方法是不够的(慢速指针可以在快速指针追上它之前到达末尾)。绑定列表,并按标识进行比较(使用=
)
请注意,如果您试图确定一个列表是否与另一个列表共享尾部,此方法是不够的(慢速指针可以在快速指针追上它之前到达末尾)。绑定列表,并按标识进行比较(使用=
)
请注意,如果您试图确定一个列表是否与另一个列表共享尾部,此方法是不够的(慢速指针可以在快速指针追上它之前到达末尾)。绑定列表,并按标识进行比较(使用=
)
请注意,如果您试图确定一个列表是否与另一个列表共享尾部,此方法是不够的(慢速指针可以在快速指针追上它之前到达末尾)。但是
==
可以信任吗?它只是比较pysical地址吗?还是内部的所有值?对于不可变类型,其含义取决于实现。因此,在我看来,它在这里不是严格可用的。我承认这有点松懈,但没有真正的选择(除了“你不应该那样做”这一有点令人不满意的立场。)@JeffreyScofield你能再解释一下吗?你可以在这里阅读我对物理平等的看法:但是=
可以信任吗?它只是比较pysical地址吗?还是内部的所有值?对于不可变类型,其含义取决于实现。因此,在我看来,它在这里不是严格可用的。我承认这有点松懈,但没有真正的选择(除了“你不应该那样做”这一有点令人不满意的立场。)@JeffreyScofield你能再解释一下吗?你可以在这里阅读我对物理平等的看法:但是=
可以信任吗?它只是比较pysical地址吗?还是内部的所有值?对于不可变类型,其含义取决于实现。因此,在我看来,它在这里不是严格可用的。我承认这有点松懈,但没有真正的选择(除了“你不应该那样做”这一有点令人不满意的立场。)@JeffreyScofield你能再解释一下吗?你可以在这里阅读我对物理平等的看法:但是=
可以信任吗?它只是比较pysical地址吗?还是内部的所有值?对于不可变类型,其含义取决于实现。因此,在我看来,它在这里不是严格可用的。我承认这有点松懈,但没有真正的选择(除了“你不应该那样做”这一有点令人不满意的立场之外)。@JeffreyScofield你能再解释一下吗?你可以在这里阅读我对身体平等的看法:
| ((_::_::xs) as a)), ((_::ys) as b) ->
if a == b then ...
else ...