1017 The Best Peak Shape (35 分)(最佳峰形)(思路+详解+翻译+题意分析)Come brather!!!!!!!!!

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

====================================================================

在许多研究领域中,分析数据的一个重要目标就是从大量充满噪声的原始数据中找到最佳的“峰形”。长度为L的“峰形”是L数{D的有序序列

现在给定N个输入数字,按照它们的索引排序,你可以删除其中的一些数字,以保持其余数字的峰值形状。最佳峰形是形成峰形的最长子序列。如果有一个平局,那么将选择最对称的(即增加子序列和减少子序列的长度之差是最小的)一个。

输入规格:

每个输入文件包含一个测试用例。对于每种情况,第一行给出整数N(3≤N≤10)

4

). 然后在下一行给出N个整数,用空格隔开。所有整数的取值范围为[−10000,10000]。

输出规范:

对于每种情况,在一行中打印最佳峰值形状的长度、索引(从1开始)和峰值数的值。如果不存在解决方案,只需在一行中打印“无峰形”。法官的输入保证了输出的唯一性。

示例Input1:

1 3 0 8 5 -2 29 20 20 4 10 4 7 25 18 6 17 16 2 -1

结尾无空行

示例Output1:

10 14 25

结尾无空行

示例Input2:

5

1 3 8 10 20

示例Output2:

No peak shape

三:分析题意+思路

========================================================================

分析题意:1.想要求一个带有峰值的 最长峰形,即峰值前面的数小于峰值,

峰值后面的数小于峰值

2.如果出现长度一样的峰型,则考虑比较对称的峰形,

即峰值左右数的个数相差比较少的

思路:我们要求的结果的过程是动态的也就是在变化,所以这类题是动态规划

统计每个数值的最佳峰形长度,最后求出最大值

那么在统计每个数值的峰形长度 = 数值前面比起小的个数 + 本身(1)+ 后面比起大的数

下标为 i 的数值 前面比起小的数

m_first[i] = max(m_first[i],m_first[前面的数] + 1),这里加一是表示统计第一次前面有数比起小的时候为1

下标为 i 的数值 后面比起小的数

m_last[i] = max(m_last[i],m_last[后面的数] + 1)

四:上码

===================================================================

/**

分析题意:1.想要求一个带有峰值的 最长峰形,即峰值前面的数小于峰值,

峰值后面的数小于峰值

2.如果出现长度一样的峰型,则考虑比较对称的峰形,

即峰值左右数的个数相差比较少的

思路:我们要求的结果的过程是动态的也就是在变化,所以这类题是动态规划

统计每个数值的最佳峰形长度,最后求出最大值

那么在统计每个数值的峰形长度 = 数值前面比起小的个数 + 本身(1)+ 后面比起大的数

下标为 i 的数值 前面比起小的数

m_first[i] = max(m_first[i],m_first[前面的数] + 1),这里加一是表示统计第一次前面有数比起小的时候为1

下标为 i 的数值 后面比起小的数

m_last[i] = max(m_last[i],m_last[后面的数] + 1)

*/

#include<bits/stdc++.h>

using namespace std;

int main(){

int m_first[10010];//存的是m[i] 前面比起小的个数

int m_last[10010]; //存的是m[i] 后面比起小的个数

int m[10010];// 存放的输入的数值

memset(m_first,0,sizeof(m_first));

memset(m_last,0,sizeof(m_last));

memset(m,0,sizeof(m));

int N;

cin >> N;

for(int i = 1; i <= N; i++){

cin >> m[i];

}

//统计 峰值 前面的递增的序列当中的数个数

for(int i = 1; i <= N; i++){

for(int j = 1; j <= i - 1; j++){

if(m[j] < m[i])

m_first[i] = max(m_first[i],m_first[j] + 1);//这里的每次更新,会将有的数值均前面比起大的 也就是m_first[i] = 0,那么后面的数统计到这时候会均比0大

}

}

//从后往前 也就是峰值后面的递减序列

for(int i = N; i >= 1; i–){

for(int j = N; j >= i + 1; j–){

if(m[j] < m[i]){

m_last[i] = max(m_last[i],m_last[j] + 1);

}

}

}

//开始统计不同下标下的个数

int max = 0;

for(int i = 1; i <= N; i++){

int temp = m_first[i] + m_last[i];

int maxx = m_first[max] + m_last[max];

if(m_first[i] == 0 || m_last[i] == 0)//如果出现递增或递减序列 那么其m_last[i] == 0, m_first[i] == 0;

continue;

else if(temp > maxx)

max = i;

//这种情况就是 长度一致,我们要选择更加对称的

else if(temp == maxx && (abs(m_first[i] - m_last[i])) < (abs(m_first[max] - m_last[max])) )

max = i;

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

人意见)

[外链图片转存中…(img-zgUmbS9g-1715760184724)]

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

[外链图片转存中…(img-KhkkOnpZ-1715760184724)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值