题目描述
给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。
返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。
解法一:暴力解法
public static int maximumDifference(int[] nums) {
// 不存在同时满足 i < j 和 nums[i] < nums[j] 这两个条件的 i, j 组合时,最大差值为 -1。
int max = -1;
for (int i = 1; i < nums.length; i++) {
for (int j = 0; j < i; j++) {
int temp = nums[i] - nums[j];
if(temp <= 0){
continue;
}
if(temp > max){
max = temp;
}
}
}
return max;
}
解法二
维护一个最小值premin,同时遍历数组。如果nums[i] > premin,则更新最小值(先比较差值),否则将nums[i] 的值赋给 premin。
public class Solution {
public static int maximumDifference(int[] nums) {
int max = -1;
int premin = nums[0];
for (int i = 1; i < nums.length; i++) {
if(nums[i] > premin){
max = Math.max(nums[i] - premin,max);
}else{
premin = nums[i];
}
}
return max;
}
}
相似题
- 买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
public int maxProfit(int[] prices) {
int max = 0;
int length = prices.length;
// 买入最低价
int min = prices[0];
for(int i=1;i<length;i++){
if(prices[i] > min){
max = Math.max(prices[i] - min,max);
}else{
min = prices[i];
}
}
return max;
}