難度:簡(jiǎn)單
題目:
給你一個(gè)下標(biāo)從 0 開(kāi)始的整數(shù)數(shù)組 nums ,該數(shù)組的大小為 n ,請(qǐng)你計(jì)算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。
返回 最大差值 。如果不存在滿(mǎn)足要求的 i 和 j ,返回 -1 。
示例 1:
輸入:nums = [7,1,5,4]
輸出:4
解釋?zhuān)?br>
最大差值出現(xiàn)在 i = 1 且 j = 2 時(shí),nums[j] - nums[i] = 5 - 1 = 4 。
注意,盡管 i = 1 且 j = 0 時(shí) ,nums[j] - nums[i] = 7 - 1 = 6 > 4 ,但 i > j 不滿(mǎn)足題面要求,所以 6 不是有效的答案。
示例 2:
輸入:nums = [9,4,3,2]
輸出:-1
解釋?zhuān)?br>
不存在同時(shí)滿(mǎn)足 i < j 和 nums[i] < nums[j] 這兩個(gè)條件的 i, j 組合。
示例 3:
輸入:nums = [1,5,2,10]
輸出:9
解釋?zhuān)?br>
最大差值出現(xiàn)在 i = 0 且 j = 3 時(shí),nums[j] - nums[i] = 10 - 1 = 9 。
解題思路:前綴最小值
理清這道題的限制條件:
1)i < j;
2)nums[i] < nums[j];
3)Max(nums[j] - nums[i]);
明確了只需要不斷找到數(shù)組中的最小值,同時(shí)計(jì)算下標(biāo)比他大同時(shí)數(shù)值也比它大的數(shù)與他的差,更新最大的差值
Java代碼:
class Solution {
public int maximumDifference(int[] nums) {
int deleteMax = -1, premin = nums[0], n = nums.length;
for(int j = 1; j < n; j++){
if(nums[j] > premin){
deleteMax = Math.max(deleteMax, nums[j] - premin);
}
else{
premin = nums[j];
}
}
return deleteMax;
}
}