Every day a leetcode
题目来源:2016. 增量元素之间的最大差值
解法1:遍历
代码:
int max(int a,int b)
{
return a>b?a:b;
}
int maximumDifference(int* nums, int numsSize){
int ans=-1;
for(int i=0;i<numsSize;i++)
{
for(int j=i+1;j<numsSize;j++)
{
if(nums[j]>nums[i]) ans=max(ans,nums[j]-nums[i]);
}
}
return ans;
}
结果:
复杂度分析:
时间复杂度:O(n^2)
空间复杂度:O(1)
解法2:前缀最小值
当我们固定 j 时,选择的下标 i 一定是满足 0≤i<j 并且 nums[i] 最小的那个 i。
因此,我们对 j 遍历,同时维护 nums[0…j−1] 的前缀最小值,记为 premin。
维护 ans 为:ans=max(ans,nums[i]-premin)。
代码:
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a>b?b:a;
}
int maximumDifference(int* nums, int numsSize){
int ans=-1;
for(int i=0,premin=nums[0];i<numsSize;i++)
{
if(nums[i]>premin) ans=max(ans,nums[i]-premin);
premin=min(premin,nums[i]);
}
return ans;
}
结果:
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)