求一个数组中满足一定条件的两个元素的最大差值
2013-08-14 11:18
471 查看
之前在电面的时候碰到一道题,要求找出一个互异数组中两个元素的最大差值。具体描述如下:
有一个整数数组d[0,...,n-1],并且数组满足不存在相同的元素,要求找出
1) max{d[i] - d[j]} 且 i > j;(对应实际生活中的股票买卖,找出可能的最大收益)
2) max{d[i] - d[j]} 且 i < j;
思路有很多种,用动态规划最简单,时间复杂度都是O(n),线性时间复杂度。
针对1)动规的模型如下:
1)设n>i>2,a(i)是以d[i]价格卖出的最大收益,那么最大收益就是d[i]的值减去d[0~i-1]中最小值,即最大收益
2)那么a(i+1)则是以d[i+1]价格卖出的最大收益,就是d[i+1]的值减去d[0~i]中最小值,而1)中已经求出了d[0~i-1]的最小值,只要把那个值与d[i]的值比较即可。
3)在所有可能的卖出点求出所有最大的收益,即为所求。
有一个整数数组d[0,...,n-1],并且数组满足不存在相同的元素,要求找出
1) max{d[i] - d[j]} 且 i > j;(对应实际生活中的股票买卖,找出可能的最大收益)
2) max{d[i] - d[j]} 且 i < j;
思路有很多种,用动态规划最简单,时间复杂度都是O(n),线性时间复杂度。
针对1)动规的模型如下:
1)设n>i>2,a(i)是以d[i]价格卖出的最大收益,那么最大收益就是d[i]的值减去d[0~i-1]中最小值,即最大收益
2)那么a(i+1)则是以d[i+1]价格卖出的最大收益,就是d[i+1]的值减去d[0~i]中最小值,而1)中已经求出了d[0~i-1]的最小值,只要把那个值与d[i]的值比较即可。
3)在所有可能的卖出点求出所有最大的收益,即为所求。
int findMaxDiff1(int n, int* d) { int i = 0; int min = d[0]; if(n < 2) return 0; int maxDiff = d[1] - d[0]; for(i = 2; i < n; i++) { if(d[i - 1] < min) { min = d[i - 1]; } if(d[i] - min > maxDiff) { maxDiff = d[i] - min; } } return maxDiff; } int findMaxDiff2(int n, int* d) { int i = 0; int max = d[0]; int maxDiff = d[0] - d[1]; if(n < 2) return 0; for(i = 2; i < n; i++) { if(d[i - 1] > max) { max = d[i - 1]; } if(max - d[i] > maxDiff) { maxDiff = max - d[i]; } } return maxDiff; }
相关文章推荐
- 一个无序实数数组中的相邻两个元素的最大差值
- 求一个数组中两个元素的最大差值
- 一个关于数组中满足条件的元素选择、及函数变换得c语言函数
- 给一个整数数组,有正有负。找出数组最大和,条件是使用的元素不能有相邻
- 说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
- 有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值。 测试样例: [10,5],2 返回:0
- 有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值。
- php 求一个无序数组经过排列后任意两个相邻元素之差的最大值(算法)
- @陈利人 : #面试题#给定两个数组X和Y,元素都是正数。请找出满足如下条件的数对的数目: x^y > y^x,即x的y次方>y的x次方;x来自X数组,y来自Y数组
- 【左神算法课】子数组最大差值小于某阈值,求满足条件的子数组个数
- 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组 最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上
- 一个关于数组中满足条件的元素选择、及再次排序得c语言函数。
- 通过两个数组字符串。各选取一个字符串元素。使其长度绝对值最大。求最大绝对值
- 【美团】有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值
- 求解一个数组中连续元素最大值
- Find K-th Smallest Pair Distance:查找数组元素中差值第K大的两个元素的差值
- 判断一个数组是否存在三个元素为某一定值
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 数组a中每个元素包含两个值第一个是整型第二个是字符串写一个sort函数以第一个值为键按从小到大排序
- 一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1