每日一题---买卖股票的最好时机(一)、(二)
目录
买卖股票的最好时机(一)
一、题目链接:买卖股票的最好时机(一)_牛客题霸_牛客网
二、解题思路
三、代码实现
买卖股票的最好时机(二)
一、题目链接:买卖股票的最好时机(二)_牛客题霸_牛客网
编辑
二、解题思路
三、代码实现
买卖股票的最好时机(一)
一、题目链接:买卖股票的最好时机(一)_牛客题霸_牛客网
二、解题思路
本题的解题思路,将会运用到贪心的算法思想。那么问题来了,什么是贪心呢?
贪心算法是一种在每一步选择中都采取当前状态下最优选择的算法,旨在通过一系列局部最优的选择来达到全局最优解。贪心算法的核心思想是在每一步都做出当前状态下的最优决策,而不考虑未来的决策结果。这种策略有时能够显著提高算法的效率,因为它减少了计算的复杂度,但同时也意味着贪心算法只能应用于那些通过局部最优解可以确保全局最优解的问题。
那么话不多说,我们开始步入正题:
因为本题只能买入和卖出一次,所以我们首先可以先定义两个变量max(用来记录利润最大值),min(用来记录当天之前的最低价格)并将第一天的价格赋值给min,然后遍历数组,每进行一次for循环,比较max和当天价格减去min的最大值,将较大的赋值给max,接下来比较min与当天价格的最小值,并赋值给min。最后循环结束输出max即可。话不多说,直接上代码!
三、代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int max=0,min=in.nextInt();
for(int i=1;i<n;i++){
int cur=in.nextInt();
max=Math.max(max,cur-min);
min=Math.min(min,cur);
}
System.out.println(max);
}
}
买卖股票的最好时机(二)
一、题目链接:买卖股票的最好时机(二)_牛客题霸_牛客网
二、解题思路
与第一题一样,本题也会用到贪心。因为可以无限次交易,所以我们每找到价格上升的区间,就将结果res加上这段区间的差值,具体如图所示:
总而言之,如果价格上升,res加上差值,否则直接跳过。
三、代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int[] arr=new int[n];
int res=0;
for(int i=0;i<n;i++){
arr[i]=in.nextInt();
}
for(int i=1;i<n;i++){
if(arr[i]-arr[i-1]>0){
res+=arr[i]-arr[i-1];
}
}
System.out.println(res);
}
}