项目场景:
给定一只股票连续 n 天的报价,假设每天报价一次且为整数价格,炒股者往往会找出该股票最长的连续上涨天数作为投资依据。现在以数组的形式给定股票 n 天的报价,要求返回该股票的最长连续上涨天数。 输入描述: 输入两行,第一行输入一个正整数 n,代表记录股票价格的天数。第二行输入 n 个正整数,代表 n 天的股票报价,规定报价数据大于等于 1 且小于等于 10000。 输出描述: 输出一行,输出一个正整数,代表最长股票连续上涨天数。 输入: 5 1 3 5 4 7 输出: 3
思路分析:
该程序首先使用Scanner
类从键盘上读取股票天数n
。
然后,使用scanner.nextLine()
读取股票报价,并将其存储在整数数组prices
中。
接下来,定义一个calculateLongestIncreasingDays()
方法,用于计算最长连续上涨天数。在该方法中,使用一个循环遍历股票报价数组,如果当前价格大于前一天的价格,则将连续上涨天数加一;否则,将连续上涨天数重置为零。同时,如果当前连续上涨天数大于最长连续上涨天数,则更新最长连续上涨天数。
最后,将最长连续上涨天数加一(加上第一天),并输出结果。
解决方案:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入股票天数
int n = scanner.nextInt();
scanner.nextLine();
// 输入股票报价
int[] prices = new int[n];
for (int i = 0; i < n; i++) {
prices[i] = scanner.nextInt();
}
// 计算最长连续上涨天数
int longestIncreasingDays = calculateLongestIncreasingDays(prices);
// 输出结果
System.out.println(longestIncreasingDays);
}
private static int calculateLongestIncreasingDays(int[] prices) {
int longestIncreasingDays = 0;
int currentIncreasingDays = 0;
for (int i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
currentIncreasingDays++;
} else {
currentIncreasingDays = 0;
}
if (currentIncreasingDays > longestIncreasingDays) {
longestIncreasingDays = currentIncreasingDays;
}
}
return longestIncreasingDays + 1; // 加上第一天
}
}