题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
package com.company;
/**
* 题目:给定一个数组 prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。
* 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。
* 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
*
* 注意:因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
* 构建模型:就是说一个数组都是非0值,找出元素j>元素i对应元素的max(差值)。
*
* 解题思路:
* 1、暴力解法:遍历数组,双重for循环,找出差值最大的两个数
* 2、遍历一遍数组,找出最小值,然后找差值,返回最大的差值
*/
public class MaxProfit {
public static void main(String[] args){
int[] prices = {7,1,5,3,6,4};
Solution solution = new Solution();
System.out.println(solution.maxProfit(prices));
Solution1 solution1 = new Solution1();
System.out.println(solution1.maxProfit(prices));
}
}
//思路1:暴力解法:遍历数组,双重for循环,找出差值最大的两个数
class Solution {
public int maxProfit(int[] prices) {
int maxprofit=0;
int temp;
for(int i=0 ; i< prices.length ; i++){
for(int j=i+1 ; j<prices.length ; j++){
temp = prices[j]-prices[i];
if(maxprofit<temp){
maxprofit=temp;
}
}
}
return maxprofit;
}
}
//思路2:遍历一遍数组,找出最小值,然后找差值,返回最大的差值
class Solution1 {
public int maxProfit(int[] prices) {
int maxprofit = 0;
int minprice = Integer.MAX_VALUE;
for (int i : prices) {
if (i < minprice) {
minprice = i;
} else if (i - minprice > maxprofit) {
maxprofit = i - minprice;
}
}
return maxprofit;
}
}