面试经典(20)--数对之差的最大值

经典接口面试题与答案整理--已完结 首先,非常感谢咱们松勤软件测试学员的面试题分享,最近小明老师把问题的答案整理了一下,分享出来给大家,希望能够帮助大家在面试过程中少踩坑,提高面试通过率。本文持续更新,后期有新的问题会同步分享给大家。有需要其他方面的知识资料的,可以私信我。大家如果对以下问题有什么更好的解答思路,也欢迎讨论区留言 1、什么是HTTP协议无状态协议?怎么解决HTTP协议无状态协议 是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发 阅读详情

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


解法一:转化成求子数组的最大和

int MaxDiff_Solution2(int numbers[], unsigned length)
{
    if(numbers == NULL || length < 2)
        return 0;
 
    int* diff = new int[length - 1];
    for(int i = 1; i < length; ++i)
        diff[i - 1] = numbers[i - 1] - numbers[i];
 
    int currentSum = 0;
    int greatestSum = 0x80000000;
    for(int i = 0; i < length - 1; ++i)
    {
        if(currentSum <= 0)
            currentSum = diff[i];
        else
            currentSum += diff[i];
 
        if(currentSum > greatestSum)
            greatestSum = currentSum;
    }
 
    delete[] diff;
 
    return greatestSum;
}
时间复杂度O(n),空间复杂度O(n).
解法二:分治算法

通常蛮力法不会是最好的解法,我们想办法减少减法的次数。假设我们把数组分成两个子数组,我们其实没有必要拿左边的子数组中较小的数字去和右边的子数组中较大的数字作减法。我们可以想象,数对之差的最大值只有可能是下面三种情况之一:(1)被减数和减数都在第一个子数组中,即第一个子数组中的数对之差的最大值;(2)被减数和减数都在第二个子数组中,即第二个子数组中数对之差的最大值;(3)被减数在第一个子数组中,是第一个子数组的最大值。减数在第二个子数组中,是第二个子数组的最小值。这三个差值的最大者就是整个数组中数对之差的最大值。第(1)(2)问题都是原问题的子问题,而第三个问题可以线性时间解决。

bool invalid=false;
int MaxDiffCore(int *data,int length)
{
	if(length<3)
	{
		return data[0]-data[1];
	}
	int left_diff=MaxDiffCore(data,length/2);
	int right_diff=MaxDiffCore(data+length/2,length-length/2);
	int max=data[0],min=data[length/2];
	//下面俩次循环取左侧子数组的最大值、右侧子数组的最小值
	for(int i=1;i<length/2;i++)
	{
		if(data[i]>max)
			max=data[i];
	}
	for(int j=length/2+1;j<length;j++)
	{
		if(data[j]<min)
			min=data[j];
	}
	int diff=max-min;
	//返回三值中的最大值
	if(left_diff>right_diff)
	{
		return left_diff>diff?left_diff:diff;
	}
	else
	{
		return right_diff>diff?right_diff:diff;
	}
}

int MaxDiff_Solution(int *data,int length)
{
	if(data==NULL || length<2)
	{
		invalid=true;
		return 0;
	}
	return MaxDiffCore(data,length);
}


时间复杂度:T(n)=2T(n/2)+O(1)。根据主定理得复杂度O(n)


解法3:动态规划

 动态规划是最优的解法,因为没有额外的空间开销,时间复杂度仍旧是O(n),但也是最难分析的一个方法。我们定义diff[i]是以第i个数字为减数的所有数对之差的最大值,也就是说对于任意的h(h<i),diff[i]>=data[h]-data[i]。diff[i]的最大值就是整个数组最大的数对之差。

假设我们已经求得了diff[i],怎么求得diff[i+1]?对于diff[i],肯定存在h(h<i),满足data[h]-data[i]是最大的,也就是说data[h]应该是data[i]左侧所有数字的最大值。当我们求diff[i+1]的时候,我们需要找到第i+1个数字左侧的最大值。有俩种可能:data[i]或者前面的data[h]。取俩这最大值就可以了。怎么感觉和求子数组最大和如此的神似呢!!

int MaxDiff_Solution(int *data, unsigned int length)
{
    if(data == NULL || length < 2)
        return 0;
 
    int max = data[0];
    int maxDiff =  max - data[1];
 
    for(int i = 2; i < length; ++i)
    {
        if(data[i - 1] > max)
            max = data[i - 1];
 
        int currentDiff = max - data[i];
        if(currentDiff > maxDiff)
            maxDiff = currentDiff;
    }
    return maxDiff;
}





一线算法工程师经典面试题 一、机器学习基础题 1、LSTM的公式 2、RNN为什么出现梯度消失及BPTT的推导 3、DQN的基本原理么 4、GBDT和随机森林有什么区别 5、GBDT的原理,如何做分类和回归 6、随机森林的随机体现在哪方面 7、Wide &Deep的原理 8、GBDT+LR是怎么做的? 9、DQN模型为什么要做经验回放 10、数据之间如果不是独立同分布的会怎样 11、AUC的原理介绍一下 12、XGBOOst和GBDT的区别。 13、强化学习和监督学习的区别 14、神经网络里面的损 阅读详情

相关推荐

数对之差的最大值

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

python加减乘除代码 被减数大_程序员面试题精选100题(61)-数对之差的最大值[算法]...

题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。分析:看到这个题目,很多人的第一反应是找到这个数组的最大值和最小值,然后觉得最大值减去最小值就是最终的结果。这种思路忽略了题目中很重要的一点:数对之差是一个数字减去它右边的数字。由于我们无法保证最大值一定位于数组...

weixin_32184669的博客 306

数组中数对差最大

数组中某数字减去其右边的某数字得到一个数对之差,求所有数对之差的最大值。

面试训练数对之差最大值

题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 思路分析: 数组需要求出左边的最大值,和右边的最小值,那么数对之差就为左边最大值减去右边最小值 可以将数组划分,那么数对之差最大值 可能有三种情况 1 左边数组数对之差 2 右边数组数对之差

hiphopmattshi的专栏 768

深入解析SAP F4帮助函数F4IF_INT_TABLE_VALUE_REQUEST的回调机制

本文深入解析了SAP ABAP开发中F4IF_INT_TABLE_VALUE_REQUEST函数的回调机制。通过剖析其工作原理与核心参数,详细阐述了如何利用回调函数实现F4帮助的多值返回、动态数据过滤及选择后校验等高级定制功能,并提供了实用的代码示例与调试技巧,帮助开发者高效应对复杂的屏幕交互需求。

weixin_29213827的博客 198

易智联LM401模块学习(四)——双串口收发

串口的发送和接受有三种方式,分别是阻塞发送和接收(轮询)、中断方式发送和接收、DMA方式发送和接收。这里我使用阻塞+中断的方式实现双串口通信。简单的串口收发。

weixin_46046597的博客 990

题目:在数组中,数字减去它右边的数字得到一个数对之差。

//题目:在数组中,数字减去它右边的数字得到一个数对之差。 //求所有数对之差的最大值。例如在数组{ 2, 4, 1, 16, 7, 5, 11, 9 }中 //数对之差的最大值是11,是16减去5的结果。 #include using namespace std; int main() { int num[] = { 2, 4, 1, 16, 7, 11,5,  9 };

u011929026的专栏 3417

从零部署DeepSeek V4 Flash:NVIDIA DGX Spark实战指南

GPU加速计算已成为现代人工智能基础设施的核心,其原理是通过并行处理架构大幅提升深度学习模型的训练与推理效率。在AI工程实践中,NVIDIA GPU凭借CUDA生态和专用驱动栈,为大规模语言模型部署提供了硬件基础。本文聚焦于企业级AI服务器部署场景,针对NVIDIA DGX Spark多节点系统的硬件初始化、驱动兼容性配置、容器化部署等关键环节,提供从系统层到应用层的完整解决方案。通过vLLM推理框架的实战配置,演示如何将DeepSeek V4 Flash模型高效部署于多GPU环境,涵盖Tensor Par

weixin_32296621的博客 377

求数对之差最大值

今天在网上看了一个面试题,很有意思!博主讲解的很到位,思路清晰流畅,代码简洁美观。从分治法 到 一种变形 再到 动态规划。看完之后,自己把思路整理了一下,把代码自己巧了一遍。 题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 详细分析 请看http:...

dawuafang 292

从原始数据到农学模型:DJI M3M/P4M多光谱影像全链路处理实战

本文详细介绍了使用DJI M3M/P4M多光谱无人机进行农学建模的全链路流程。核心在于强调辐射标定的首要性,它将原始DN值转换为具有物理意义的反射率,是确保后续植被指数计算与模型反演准确性的基石。文章通过大疆智图和Pix4Dfields的实战演示,手把手指导完成数据处理、影像镶嵌及光谱信息提取,最终构建从光谱指数到叶面积指数等关键农学参数的反演模型,实现精准农业分析。

weixin_29281941的博客 243

【读论文】AI陪伴场景长期记忆(用户画像)解决方案

在长程人机交互中,如何让 AI 记住用户,不再是简单的“检索增强(RAG)”就能解决的问题。传统的向量数据库面临“信息信噪比低”、“人格不一致”以及“随着对话无限增长而崩塌”的困境。MemTensor 团队联合人大提出的Inside Out框架,从认知心理学汲取灵感,提出了一种基于PersonaTree(人格树)的显式记忆进化机制。该方案通过训练一个轻量级的(使用 DeepSeek-R1 蒸馏数据 + GRPO 强化学习),实现了将非结构化对话流实时压缩为结构化树操作(新增|更新|删除)。

kakaZhui的博客 816

【每日算法Day 97】经典面试题:求两个数组最小差

题目链接LeetCode 面试题 16.06. 最小差[1]题目描述给定两个整数数组 a 和 b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差。说明:1 &...

azl397985856的专栏 1690

[QMT量化交易小白入门]-105、震荡市最适合的策略:ETF多标的动态网格策略,回测年化收益47.81%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 2061

数组中元素差的最大值

这道题是2016美团面试题: 1.给定一个数组arr,数组长度为len,求满足 0 <= a <= b < len的 arr[b] - arr[a]最大值。 你的想法:让每一个数字减去它右边的数字,并通过比较得到数对的最大值,时间复杂度(O^2),这应该是面试官不想要的。 解法一:分治法(递归实现) 假设把数组分成两个子数组,用左数组最大的减去右数组最小的,最大...

asdfghjkl978564的博客 505

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 938

i茅台最新任务python脚本

从固定的 `header_context` 生成HTTP请求头,并加入用户的`userId`、`MT-Token`等动态信息,以模仿真实的请求。- 发送预约请求,提交商品和门店的参数,如 `sessionId`、`shopId`、`itemId` 等。- 定时任务:通过 `cron` 表达式 `0 0 9/21 * * *`,表示每月的9日和21日的0点执行。- `login`:使用验证码进行登录,并返回 `token` 和 `userId`。- 获取北京时间当天0点的时间戳,作为预约请求的时间参数。

三维点云技术探索 980

力扣面试经典150 —— 16-20题

力扣150题16-20

佚失的诗篇 1431

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

算法面试 精选微软经典的算法面试100题(第1-20题)

算法面试 精选微软经典的算法面试100题(第1-20题)

gdfyug的博客 1080

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

网易校园招聘历年经典面试题汇总:C++研发岗

这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 这个系列离结束差的还特别多,会更新涵盖所有一线大厂的所有岗位,也可以关注一下。 腾讯校园招聘历年经典面试题汇总:前端 腾讯校招历年经典面试汇总:C++研发岗 今日头条校园招聘历年经典面试题汇总:C++研发岗 京东&华为 Java开发历年经典题汇总 百度校招历年经典面试题汇总:Java开发岗 百度校园招聘历年经典面试题汇总:C++研发岗 最容易进的大厂工作,百度经典百题 超经典,百度最爱考的安..

少说,多做。 6664

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

经典的求数组中最大值及其位置的问题.

去年参加一个物流公司的面试 ,被问到这个经典的简单的我却没有解出来的问题. 一个100个实数的数组,求其中的最大值和位置. 回头想来,简直简单的不能再简单了。这可是我们学数据结构时第一课就学了的啊 谁叫我当时睡着了...后来看书才发现.呵呵 解题的思想就是先用一个100的数组来存放最大值的位置,因为最大值有可能有多个. 然后遍历数组,凡是比posion位置大的,都变成posion...

2094

web前端面试宝典——带你直击面试重难点(40个经典题目,涵盖近90%的考点,码字2w,干货满满!)

2022web前端面试宝典 —— 一文带你直击面试重难点(40个经典题目,涵盖近90%的考点,码字2w,干货满满!)

HuoZhiyan 的博客 3373

算法面试:精选微软经典的算法面试100题(第1-20题)

算法面试:精选微软经典的算法面试100题[1-10]引言:给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】举一个例子,数值:0,1,2,3,4,5,6,7,8,9分配:6,2,1,0,0,0,1,0,0,00在下排出现了6次,1在下排出现了2次,2在下排出现了1次,3在下排出现了0次....以此类推..1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换

结构之法 算法之道 4万+

面试经典150题[045]:快乐数(LeetCode 202)

面试经典150题[045]:快乐数(LeetCode 202)

YoungHong1992 515

7月20日,贪心入门+贪心经典面试题

贪心简介+经典面试题

2302_81982408的博客 931
上一篇: 面试经典(1)---翻转句子中单词的顺序
下一篇: 面试经典(21)--最大回文
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值