题目:
给你一个下标从 0 开始的整数数组
nums
,该数组的大小为n
,请你计算nums[j] - nums[i]
能求得的 最大差值 ,其中0 <= i < j < n
且nums[i] < nums[j]
。返回 最大差值 。如果不存在满足要求的
i
和j
,返回-1
。
思路:
拿到这道题,我们分析返回值的情况,要么是存在至少一个后面的大于前面的,这时返回差值;要么不存在,这时就返回-1。
求最大差值的思路:我们可以用一个数来存储前面数的最小值,然后让这个值和下一个数做差,来作为一个结果,如果这个结果大于之前的结果,则更新结果。同时将后面这个数加入到前面(即根据这个数更新最小值)。
如果后面的都小于前面的,那么我们就不更新,返回-1,所以我们可以直接初始化result为-1来减少代码量。
最后我们要考虑相邻两个数相等的情况,此情况不满足后面的大于前面的,我们不应该更新数据,而差为0,会更新-1的数据,所以我们每次要先判断是否相等,相等直接continue。
代码:
package LiKouZhouSai;
public class Day9_26 {
public static void main(String[] args) {
Solution solution=new Solution();
System.out.println(solution.maximumDifference(new int[]{9,9,3,2}));
}
}
class Solution {
public int maximumDifference(int[] nums) {
int result=-1;
int min=nums[0];
for(int i=1;i<nums.length;i++){
if(min==nums[i]){
continue;
}
if(result<nums[i]-min){
result=nums[i]-min;
}
if(min>nums[i]){
min=nums[i];
}
}
return result;
}
}