2022-11-18:给定一个数组arr,表示连续n天的股价,数组下标表示第几天 指标X:任意两天的股价之和 - 此两天间隔的天数 比如 第3天,价格是10 第9天,价格是30 那么第3天和第9天的指

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-11-18:给定一个数组arr,表示连续n天的股价,数组下标表示第几天 指标X:任意两天的股价之和 - 此两天间隔的天数 比如 第3天,价格是10 第9天,价格是30 那么第3天和第9天的指相关的知识,希望对你有一定的参考价值。

2022-11-18:给定一个数组arr,表示连续n天的股价,数组下标表示第几天
指标X:任意两天的股价之和 - 此两天间隔的天数
比如
第3天,价格是10
第9天,价格是30
那么第3天和第9天的指标X = 10 + 30 - (9 - 3) = 34。
返回arr中最大的指标X。
时间复杂度O(N)。
来自神策。

答案2022-11-18:

一次遍历即可。
时间复杂度:O(N)。
额外空间复杂度:O(1)。

代码用rust编写。代码如下:

fn main() 
    let mut nums = vec![2, 3, 1, 4, 0];
    let ans = max_x(&mut nums);
    println!("ans = :?", ans);


fn max_x(arr: &mut Vec<i32>) -> i32 
    if arr.len() < 2 
        return -1;
    
    // 0 + arr[0]
    let mut pre_best = arr[0];
    let mut ans = 0;
    for i in 1..arr.len() as i32 
        ans = get_max(ans, arr[i as usize] - i + pre_best);
        pre_best = get_max(pre_best, arr[i as usize] + i);
    
    return ans;


fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T 
    if a > b 
        a
     else 
        b
    


执行结果如下:


左神java代码

以上是关于2022-11-18:给定一个数组arr,表示连续n天的股价,数组下标表示第几天 指标X:任意两天的股价之和 - 此两天间隔的天数 比如 第3天,价格是10 第9天,价格是30 那么第3天和第9天的指的主要内容,如果未能解决你的问题,请参考以下文章

2022-08-22:给定一个数组arr,长度为n,最多可以删除一个连续子数组, 求剩下的数组,严格连续递增的子数组最大长度。 n <= 10^6。 来自字节。5.6笔试。

各个元素之和等于给定值的连续子数组的个数

确定给定数组中连续相等元素的最大数量

2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由01组成的数组arr,长度为N, arr[i] == 0表示str中i位置的字符不许修改, arr[i] ==

找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

连续子序列的最大乘积