gpt4 book ai didi

rust - 如何返回数组中三个最大元素的总和?

转载 作者:行者123 更新时间:2023-12-03 11:33:43 33 4
gpt4 key购买 nike

我试图在这样的数组中返回3个最大数字的总和:

fn max_tri_sum(arr: &[i32]) -> i32 {
arr.sort();
arr[0]+arr[1]+arr[2]
}
但我不断收到此错误:
error[E0596]: cannot borrow `*arr` as mutable, as it is behind a `&` reference

fn max_tri_sum(arr: &[i32]) -> i32 {
------ help: consider changing this to be a mutable reference: `&mut [i32]`

arr.sort();
^^^ `arr` is a `&` reference, so the data it refers to cannot be borrowed as mutable
由于某些限制,我不应该将 arr: &[i32]更改为 arr: &mut [i32]。那我该怎么办呢?
附言:我试图将 arr克隆为可变变量,但出现了其他错误:
fn max_tri_sum(arr: &[i32]) -> i32 {
let a: &mut [i32] = *arr.clone();
a.sort();
a[0]+a[1]+a[2]
}

最佳答案

在Rust中,不能在同一作用域中同时具有引用和可变引用的变量。
您有几种选择:

  • 您可以简单地对切片执行循环以获取所需的值。像这样的东西(迭代器可能有更优雅的方式)

  •     fn max_tri_sum(arr: &[i32]) -> i32 {
    let mut maxes = [0, 0, 0];
    for &el in arr {
    if el > maxes[0] && el < maxes[1] {
    maxes[0] = el;
    } else if el > maxes[1] && el < maxes[2] {
    if maxes[1] > maxes[0] {
    maxes[0] = maxes[1];
    }
    maxes[1] = el;
    } else if el > maxes[2] {
    if maxes[2] > maxes[1] {
    maxes[1] = maxes[2];
    }
    maxes[2] = el;
    }
    }

    maxes[0] + maxes[1] + maxes[2]
    }
  • 您可以从切片中创建一个新的Vec,然后对其执行所有操作(这需要分配,但对于小型Vec来说应该没问题)。

  •     fn max_tri_sum(arr: &[i32]) -> i32 {
    let mut arr = Vec::from(arr);
    arr.sort();
    arr[0] + arr[1] + arr[2]
    }
    我还想指出 sort从最小到最大排序,因此索引 0, 1, 2, ...将是数组中的最小值,我不认为这是您想要做的!

    关于rust - 如何返回数组中三个最大元素的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65383592/

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