2019招商银行M-Geeker线上比赛题解析
目前已更新:第一题,第二题,第四题
题目描述:

首先考虑常规的最大子序和的问题,即不能去掉中间的一段,leetcode上有一个这样 的题目:
分析如下:
考虑数组中某一位置的元素
nums[i],如果nums[i] + (i 前面若干个连续数组成的累计和) > nums[i],则表示加上nums[i]之后会组成更大的子序和,我们就把相加值赋给nums[i],反之,则不动nums[i]的值,这之后的nums[i]表示:从前往后遍历,到i 这个位置时的最大子序和(注意:nums[i]必须在包含里面,表示包含nums[i]的最大子序和,而不是nums[:i+1]的最大子序和)。参考下图:

而我们这个问题有个附加条件:可以去掉中间的一段。
假如我们随便去掉中间的一段,则数组被分成两段(数组1,数组2):
最大子序和 = 数组1从前往后遍历的最大子序和 + 数组2从后往前遍历的最大子序和
这里有一个问题就是如果数组1最大子序和不是出现在数组1最后的位置,还等价吗?其实是等价的,相当于多去掉一段,并不影响结果。因此,代码可以写成:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
nums = [0] + nums # 加一个0是为了防止全负数的情况,这种情况下则不包含任何元素,子序和为0
nums1 = nums[:]
nums1.reverse() # 复制一份,并反转数组
n = len(nums)
for i in range(1,n):
nums[i] = max(nums[i],nums[i-1]+nums[i]) # 从前往后的最大子序和
nums1[i] = max(nums1[i],nums1[i-1]+nums1[i]) # 从后往前的最大子序和
# 遍历数组,找最大值
max_ = 0
for i in range(n-1):
for j in range(0, n-i-1):
max_ = max(max_, nums[i]+nums1[j])
print(nums,nums1)
return max_
2. 矩阵求乘积最大
题目描述:

这一题可以简化,以其中的两行为例:
若第一行的最大值的序号与第二行的最大值的序号互异,则这两行
乘积的最大值为两行分别的最大值相乘;若第一行的最大值得序号与第二行的最大值的序号相等,说明某一行的最大值的序号与另一行的第二大值得序号必互异,则
乘积最大值在某一行的最大值与另一行的第二大的值的乘积当中(共有两个,取最大的)
代码如下:
nums = [[1,2,3,4], [5,6,7,8], [9,10,11,12]]
n = len(nums)
m = len(nums[0])
target = []
for i in range(n):
tmp = [[-float("inf"), -1], [-float("inf"), -1]] # 存储当前行的最大值,第二大的值以及他们各自的序号
for j in range(m):
if nums[i][j] > tmp[0][0]:
tmp[1] = tmp[0][:]
tmp[0][0] = nums[i][j]
tmp[0][1] = j
target.append(tmp)
max_ = -float("inf")
for i in range(n):
for j in range(i+1,n):
if target[i][0][1] != target[j][0][1]: # 如果最大值两个序号不相等,则这两行的最大值是两行各自最大值的乘积
max_ = max(target[i][0][0]*target[j][0][0], max_)
else: # 反之则说明这两行中某一行的最大值的序号和另一行的第二大的值的序号是互异的
max_ = max(target[i][0][0]*target[j][1][0], target[i][1][0]*target[j][0][0], max_)
print(max_)
3. 逐渐平均——值最大
题目描述:

这题思路很简单:
- 首先要明确一点,最先加入的数被除的次数最多,比如第一个数,他就相当于除以了
2^(n-1),每次除,这个数都会减少一半。基于这个思想,我们要做到的是,要让最大的数尽量少被除,因此我们可以先排序,然后一遍遍历就可以解决。
代码如下:
nums = [4,5,2,6,1,7,5,9]
nums.sort()
target = round(nums[0],4)
for i in range(1,len(nums)):
target = round((target + nums[i])/2, 4)
print(target)
2019招商银行M-Geeker线上比赛题解析的更多相关文章
- 2019 第三届强网杯线上赛部分web复现
0x00前言 周末打了强网杯,队伍只做得出来6道签到题,web有三道我仔细研究了但是没有最终做出来,赛后有在群里看到其他师傅提供了writeup和环境复现的docker环境,于是跟着学习一波并记录下来 ...
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 F题 Clever King(最小割)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- CorelDRAW 2019线上发布会报名已开始
近日,由苏州思杰马克丁软件公司独家代理的CorelDRAW 2019将在苏州开启一场设计上的饕餮盛宴,您报名了么? 不管您是专业的设计师还是热爱设计的狂热粉丝,都将有机会参与到我们的活动中,为了这场盛 ...
- 放码来战!HMS Core线上Codelabs挑战赛正式开始
亲爱的开发者,在1024程序员节即将到来之际,HMS Core准备了一场线上Codelabs挑战赛,现向你发出诚挚邀请,希望你能将新奇的想法和对产品的思考融入代码,用技术与世界对话. HMS Core ...
- BTrace:线上问题排查工具
BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程 使用场景 BTrace 是一个事后工具,所谓事后工具就是在服务已经上线了,但是发现存 ...
- 记Booking.com iOS开发岗位线上笔试
今晚参加了Booking的iOS职位线上笔试,结束后方能简单归纳一下. 关于测试内容: Booking采用了HackerRank作为测试平台,测试总时长为75分钟,总计4道题. 测试之前我很紧张,因为 ...
- NOI Day2线上同步赛崩盘记
Preface 蒟蒻愉快的NOI线上赛Day2之行,不过因为太菜就凉了 这次由于策略&&网络的问题,最后两题都没有交,结果就靠T1稳住拿了75分就回家了. 我真是太菜了. 屠龙勇士 首 ...
随机推荐
- jquery weui 图片浏览器Photo Browser
jquery weui 图片浏览器Photo Browser 如何使用? 对应组件地址:http://jqweui.com/extends#swiper 先说说业务场景:类似朋友圈这样的布局效果,点击 ...
- 图解 perspective && perspective-origin && transform3d && transform-origin
perspective && perspective-origin perspective是物体相对于画布的视距距离 perspective-origin是物体在画布位置的中心视点 t ...
- [计算机视觉][ARM-Linux开发] Ubuntu14.04安装OpenCV3.2中遇到的问题的解决方案
2. ubuntu下,opencv3.x安装一直downloading这个包,要看超时信息里的下载路径,把它放到下载路径中,比如我的opencv3.2.0源文件路径为/home/han/softwar ...
- Linux中执行 .sh 的方法
linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限. 是bash脚本么 可以用touch test.sh #创建test.sh ...
- Java中的IO流之输入流|乐字节
亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入 ...
- 二十二、DMA驱动
一.DMA简介 DMA(Direct Memory Access,直接内存存取),DMA传输将数据从一个地址空间复制到另外一个地址空间.传输过程由DMA控制器独立完成,它并没有拖延CPU的工作,可以让 ...
- javascript基本类型和对象
JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object). 基本类型 null undefined boolean number string symbol 其中 JS 的 ...
- NOI2000 青蛙过河[递推]
也许更好的阅读体验 \(\mathcal{Description}\) 原题链接: Comet OJ 洛谷 大小各不相同的一队青蛙站在河左岸的石墩(记为A)上,要过到对岸的石墩(记为D)上去.河心有几 ...
- 优秀的java 社区
并发编程网 - ifeve.com InfoQ - 促进软件开发领域知识与创新的传播开源中国 - 找到您想要的开源项目,分享和交流IBM developerWorks 中国 : IBM's resou ...
- 扩展支持全选的CheckBox列。
扩展支持全选的CheckBox列. https://www.codeproject.com/articles/42437/toggling-the-states-of-all-checkboxes-i ...