目前已更新:第一题,第二题,第四题

题目描述:

首先考虑常规的最大子序和的问题,即不能去掉中间的一段,leetcode上有一个这样 的题目:

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线上比赛题解析的更多相关文章

  1. 2019 第三届强网杯线上赛部分web复现

    0x00前言 周末打了强网杯,队伍只做得出来6道签到题,web有三道我仔细研究了但是没有最终做出来,赛后有在群里看到其他师傅提供了writeup和环境复现的docker环境,于是跟着学习一波并记录下来 ...

  2. CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

    金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...

  3. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  4. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 F题 Clever King(最小割)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  5. CorelDRAW 2019线上发布会报名已开始

    近日,由苏州思杰马克丁软件公司独家代理的CorelDRAW 2019将在苏州开启一场设计上的饕餮盛宴,您报名了么? 不管您是专业的设计师还是热爱设计的狂热粉丝,都将有机会参与到我们的活动中,为了这场盛 ...

  6. 放码来战!HMS Core线上Codelabs挑战赛正式开始

    亲爱的开发者,在1024程序员节即将到来之际,HMS Core准备了一场线上Codelabs挑战赛,现向你发出诚挚邀请,希望你能将新奇的想法和对产品的思考融入代码,用技术与世界对话. HMS Core ...

  7. BTrace:线上问题排查工具

    BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程 使用场景 BTrace 是一个事后工具,所谓事后工具就是在服务已经上线了,但是发现存 ...

  8. 记Booking.com iOS开发岗位线上笔试

    今晚参加了Booking的iOS职位线上笔试,结束后方能简单归纳一下. 关于测试内容: Booking采用了HackerRank作为测试平台,测试总时长为75分钟,总计4道题. 测试之前我很紧张,因为 ...

  9. NOI Day2线上同步赛崩盘记

    Preface 蒟蒻愉快的NOI线上赛Day2之行,不过因为太菜就凉了 这次由于策略&&网络的问题,最后两题都没有交,结果就靠T1稳住拿了75分就回家了. 我真是太菜了. 屠龙勇士 首 ...

随机推荐

  1. Docker之使用Docker-compose搭建LNMP环境

    之前有随笔介绍使用Docker-compose搭建LNMP环境(centos6 php5.6) https://www.cnblogs.com/minseo/p/10146982.html 本文介绍D ...

  2. 在Django中template遇到 "context must be a dict rather

    原代码: # 使用模板文件 # 1.加载模板文件,获取一个模板文件 temp = loader.get_template('booktest/index.html') # 2.定义模板上下文:给模板文 ...

  3. svn查看登录过的账号密码

    直接下载:http://www.leapbeyond.com/ric/TSvnPD/

  4. Appium移动自动化测试-----(十三)appium API 之其他操作

    其它操作针对移动设备上特有的一些操作. 1.熄屏 方法: * lockDevice() 点击电源键熄灭屏幕. 在iOS设备可以设置熄屏一段时间.Android上面不带参数,所以熄屏之后就不会再点亮屏幕 ...

  5. [转载]SQL Server提权系列

    本文原文地址:https://www.cnblogs.com/wintrysec/p/10875232.html 一.利用xp_cmdshell提权 xp_cmdshell默认是关闭的,可以通过下面的 ...

  6. Linux题库练习

    转一个Linux的题库供自己学习使用(滑稽) 转自:http://www.linuxdiyf.com/view_202485.html 选择题1 在终端下输入mount -a命令的作用是:CA 强制进 ...

  7. C++编译提示 default argument are given of parameter ..

    如果定义一个类的构造函数时,带有默认的入参值,在cpp文件中实现构造函数时,是不能带的!否则就会提示该种类型的编译错误. //.h文件: namespace Ui { class Task; } cl ...

  8. Asp.Net Core 调用第三方Open API查询物流数据

    在我们的业务中不可避免要与第三方的系统进行交互,调用他们提供的API来获取相应的数据,那么对于这样的情况该怎样进行处理呢?下面就结合自己对接跨越速运接口来获取一个发运单完整的物流信息为例来说明如何在A ...

  9. 阿里云服务器安装mysql8遇到的问题

    1.提供一个离线mysql下载路径:http://mirrors.163.com/mysql/Downloads/MySQL-8.0/ 2.在线mysql8安装: 2.1 下载mysql: wget ...

  10. Swing的基本操作

    package GUI_experience; import java.awt.*; import java.awt.Container; import java.awt.FlowLayout; im ...