题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16 减去5 的结果。

1.思路

Solution1: 将其转换成求最大子数组问题。引入辅助数组diff,长度为n-1。diff[i]=dif[i]-diff[i+1]。求出最大子数组以及位置low,high。则对应最大差为data[low]-data[high+1]。

Solution2: 使用动态规划法。假设data[i]减去某个数,其最大的数对差为currentMax。则data[i-1]的最大数对差为data[i-1]-data[i]和data[i-1]-data[i]+currentMax中的较大的那一个。从后往前遍历数组,记录最大的currentMax以及对应的low、high输出即可。

时间复杂度O(n),空间复杂度O(1)。

2.代码

solution2:

#include"iostream"
using namespace std;void  fun(int data[],int size,int &low,int &high){int max=data[size-1]-data[size-2];//最大的数对差int currentMax=data[size-1]-data[size-2];//当前的数对差int l=size-2;int h=size-1;low=l;//被减数位置high=h;//减数位置for(int i=size-3;i>=0;i--){if(currentMax>0){currentMax=data[i]-data[i+1]+currentMax;l--;}else{currentMax=data[i]-data[i+1];l=i;h=i+1;}if(currentMax>max){low=l;high=h;max=currentMax;}}
}void main(){int data[]={2,4,1,16,7,5,11,9};int low,high;fun(data,sizeof(data)/sizeof(int),low,high);cout<<"the max is "<<data[low]-data[high]<<endl;}

转载于:https://www.cnblogs.com/engineerLF/p/5393041.html

每天一道算法题(10)——数对之差的最大值相关推荐

  1. 程序员面试题精选100题(61)-数对之差的最大值[算法]

    题目:在数组中,数字减去它右边的数字得到一个数对之差.求所有数对之差的最大值.例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果. 分析:看到 ...

  2. 程序员面试题精选100题(61)-数对之差的最大值

    题目:在数组中,数字减去它右边的数字得到一个数对之差.求所有数对之差的最大值.例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果. 分治策略: ...

  3. 一天一道算法题--6.15--卡特兰数

    感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: ...

  4. 每天一道算法题系列十二之整数转罗马数字

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/integer-to-roman/ 来源是力扣,大家喜欢可以去力扣中文 ...

  5. 截止目前为止,我遇到的最难的一道算法题:计算相邻两个数的最大差值

    hello,今天给大家带来一道算法题.这道算法题,是我目前为止,见过最难的一道题.那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值. 要求时间复杂度O( ...

  6. 一道算法题跟大家分享

    无意中看到一道算法题,拿出我的解法与大家分享. 题目:输出1,2,3,4四个数字能组成的互不相同且无重复的三位数并统计满足条件的三位数个数 大家先想想,再看答案吧. View Code 1 /// & ...

  7. 每天一道算法题系列十七之电话号码的字母组合

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-numb ...

  8. 一天一道算法题--5.30---递归

    感谢微信平台:  一天一道算法题 --------每天多一点进步--------- 今天 休假 这题 也很水 能发现 规律就好 明天 再也不能这样了 forgive me ---------- 转载于 ...

  9. 搜狗2020秋招笔试的一道算法题

    搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...

最新文章

  1. android从放弃到精通 第三天 我还活着
  2. SP-1. 五月学习计划(study plan)
  3. Matlab自定义函数的几种方法
  4. 下列哪些是java语言的条件执行语句_13春福师《JAVA程序设计》在线作业二
  5. 理解Python的迭代器
  6. 配置OpenCV的Qt开发环境
  7. 第三方登录android代码,Android Learning:微信第三方登录(示例代码)
  8. 双十一要来了,如何设计出那些牛X的促销页面?
  9. 打开帧率显示_2K165hz IPS屏,微星MAG274QRF-QD显示器
  10. python字典统计排序 统计各省份大学数量_1641统计字典排序元音字符串的数量(递归,递归),数目,递推...
  11. mysql初始化登录报错解决-1
  12. 【训练计划】--2019-04
  13. matlab怎么截图清晰度,matlab截图到期刊论文中如何保持清晰度的方法
  14. 基于MIMO讲解信道估计基本原理
  15. C语言 java 判断闰年,一个月有多少天
  16. 办公人员必须会的15种求和技巧
  17. sklearn代码9 7-KNN-salay
  18. 企业邮箱品牌哪家好?四大品牌企业邮箱推荐
  19. 十年架构师留下最完整的Java学习路线
  20. wps手机版ppt动画效果_你不知道的WPS|仅这2个制作PPT的动画技能,就足够让你的PPT逼格瞬间提升...

热门文章

  1. @GeneratedValue不能使属性自增长
  2. python科学坐标系绘制分析_python数据可视化案例——平行坐标系(使用pyecharts或pandas)...
  3. python为运行为何出现乱码_我的python写入文件正常,打开后却是乱码格式为什么?...
  4. java并行调度_java并行调度框架封装及示例
  5. linux socket closeconnection,求助:socket的Connection refused
  6. pytorch GPU加速运算
  7. 2005年计算机课程,2005年暑期非计算机专业计算机基础课程教学研讨会成功举办...
  8. php百度地图定位到街道,百度地图拖动标注输出当前定位坐标及街道信息
  9. java中怎么把两个JTextfield中的数字相加的值放到另一个JTextfield?_如何将jtextfield中的值解析为整数并对其执行一些数学操作?...
  10. linux 变量c file代表的内容.,LinuxC编程基础--mak.ppt