刷题笔记 | 股票价格上涨天数计算 | 豆包MarsCode AI刷题

43 阅读3分钟

问题描述

小C是一名股票交易员,最近他关注某只股票的价格波动。给定该股票连续N天的价格列表 stockPrices,你需要为小C生成一个新列表,每个位置的值表示从那天起至少需要等待多少天才能看到价格上涨。如果没有上涨的情况,则对应位置的值为0。

例如,对于股票价格列表 [33, 34, 14, 12, 16],从第一天价格 33 开始,价格上涨发生在第二天价格 34,所以输出 1。若某天之后不再有价格上涨,则输出 0。

测试样例

样例1:

输入:N = 5, stockPrices = [33, 34, 14, 12, 16]
输出:[1, 0, 2, 1, 0]

样例2:

输入:N = 6, stockPrices = [45, 44, 46, 43, 42, 48]
输出:[2, 1, 3, 2, 1, 0]

样例3:

输入:N = 3, stockPrices = [10, 9, 8]
输出:[0, 0, 0]

问题理解

我们需要为小C生成一个新列表,每个位置的值表示从那天起至少需要等待多少天才能看到价格上涨。如果没有上涨的情况,则对应位置的值为0。

解题思路

  1. 初始化结果数组:创建一个与输入数组 stockPrices 相同长度的数组 result,用于存储每个位置的等待天数。
  2. 遍历每个价格:使用一个外层循环遍历 stockPrices 数组中的每个价格。
  3. 查找价格上涨:对于每个价格,使用一个内层循环从当前价格的下一天开始,查找是否有价格上涨。
  4. 记录等待天数:如果在内层循环中找到价格上涨,记录等待天数并跳出内层循环。如果没有找到价格上涨,等待天数保持为0。
  5. 存储结果:将等待天数存入结果数组 result 的对应位置。
  6. 返回结果:返回结果数组 result
public class Main {
    public static int[] solution(int N, int[] stockPrices) {
        // write code here
        int[] result = new int[N];
        
        // 遍历每个价格
        for (int i = 0; i < N; i++) {
            // 初始化等待天数为0
            int days = 0;
            
            // 从当前价格的下一天开始,查找是否有价格上涨
            for (int j = i + 1; j < N; j++) {
                // 如果找到价格上涨,记录等待天数并跳出循环
                if (stockPrices[j] > stockPrices[i]) {
                    days = j - i;
                    break;
                }
            }
            
            // 将等待天数存入结果数组
            result[i] = days;
        }
        
        return result;
    }

    public static void main(String[] args) {
        System.out.println(java.util.Arrays.equals(solution(5, new int[]{33, 34, 14, 12, 16}), new int[]{1, 0, 2, 1, 0}));
        System.out.println(java.util.Arrays.equals(solution(6, new int[]{45, 44, 46, 43, 42, 48}), new int[]{2, 1, 3, 2, 1, 0}));
        System.out.println(java.util.Arrays.equals(solution(3, new int[]{10, 9, 8}), new int[]{0, 0, 0}));
    }
}

复杂度分析

  • 时间复杂度:O(N^2),因为我们需要使用双重循环来遍历每个价格并查找价格上涨。
  • 空间复杂度:O(N),因为我们使用了一个额外的数组 result 来存储等待天数。