Ocaml中最长递增子阵列

Ocaml中最长递增子阵列,ocaml,Ocaml,我正试图为下一个问题找到一个解决方案:在OCaml中编写一个函数,该函数的第一个和最后一个索引是最长的递增子数组,作为输出。我正在努力修复错误。 到目前为止,我写了以下内容: 例如: longest_increasing_subarray [|2;4;6;9;1;5;3;5;0;8;9;13;17|];; - : (8,12) 这是我目前的代码: let longest_increasing_subarray p1 = let n = Array.length p1 and beg =

我正试图为下一个问题找到一个解决方案:在OCaml中编写一个函数,该函数的第一个和最后一个索引是最长的递增子数组,作为输出。我正在努力修复错误。 到目前为止,我写了以下内容:

例如:

longest_increasing_subarray [|2;4;6;9;1;5;3;5;0;8;9;13;17|];;
- : (8,12)
这是我目前的代码:

let longest_increasing_subarray p1 =
  let n = Array.length p1
  and beg = ref 0
  and larg = ref(0,0) in
  for i=0 to n-1 do begin
    if i=0 then begin
    end;
    if p1.(i-1)<p1.(i) then
      begin
        if (snd !larg - fst !larg +1)<((i-1)-(!beg+1)) then
          !larg = (!beg,i-1)
            !beg = i end;
    if (i=n-1) then
      begin if (snd !larg-fst !larg +1)<((i)-(!beg)+1) then
          !larg := (!beg,i)
      end;
  end;
  done;
  !larg;;

您的代码和方法存在一些问题,让我在问答表中强调一下:

如何为引用赋值

正确:

x := v
x := v;
y := p
if p1.(i - 1) < p1.(i) 
then update_indices i;
else reset_indices ();
错:

如何连续做两个作业

正确:

x := v
x := v;
y := p
if p1.(i - 1) < p1.(i) 
then update_indices i;
else reset_indices ();
错:

如何根据条件进行分支

正确:

x := v
x := v;
y := p
if p1.(i - 1) < p1.(i) 
then update_indices i;
else reset_indices ();
错误:对循环、引用等使用命令行
我想你忘了问这个问题:比如你是在试图解决代码中的类型错误,还是在问应该采取什么方法?请编辑您的帖子,并添加一个明确的问题,否则,它将被关闭,因为太广泛了。以下是一些。