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

题目描述:

首先考虑常规的最大子序和的问题,即不能去掉中间的一段,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. 【Leetcode_easy】977. Squares of a Sorted Array

    problem 977. Squares of a Sorted Array solution: class Solution { public: vector<int> sortedSq ...

  2. 获取两日期之前集合并转为String类型的集合

    /** * 获取两个日期之间的日期 * * @param start 开始日期 * @param end 结束日期 * @return 日期集合 */ private static List<D ...

  3. 云开发 :云原生(Cloud Native)

    云开发 :云原生(Cloud Native) 云原生 所谓云原生,它不是一个产品,而是一套技术体系和一套方法论,用于构建和运行充分利用云计算模型优势的应用.云计算将提供无限制的按需计算能力和根据使用情 ...

  4. iOS 多线程的简单理解(4) 线程锁的简单使用

    要用到多线程 ,就不得不考虑,线程之间的交互,线程是否安全 推荐一个原文链接 是关于 线程锁的基本使用的  http://blog.csdn.net/qq_30513483/article/detai ...

  5. 钩子(hook)

    钩子(hook)编程     钩子(hook)编程 一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows ...

  6. Image Perimeters

    Description 给出一张由"x"和"."组成的矩阵.每个"x"可以向上下左右及两个斜对角进行连通,请问由某个点开始的"x& ...

  7. 剑指offer64:滑动窗口的最大值

    1 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4 ...

  8. qt 旧项目编译运行提示 “启动程序失败,路径或者权限错误?” 原因及解决方法

    qt 旧项目编译运行提示 "启动程序失败,路径或者权限错误?" 原因及解决方法 原因 Qt Creator在打开项目文件的同时会生成.pro.user文件,.pro.user文件叫 ...

  9. 搭建hexo静态博客

    使用hexo搭建博客,并将博客部署到github 需要的工具 Node.js Git 一个Github账号 正式开始 在任意目录下新建一个文件夹,如blog,在该文件夹下右键打开git bash he ...

  10. 开始Jupyter Notebooks

    开始Jupyter Notebooks 安装Anaconda 因为不能有空格,所以没有选C:\Program Files 认识Jupyter Notebooks 修改 jupyter notebook ...