牛客代码刷题记录1

问题一
  1. 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值:
    [6] = 6 * 6 = 36;
    [2] = 2 * 2 = 4;
    [1] = 1 * 1 = 1;
    [6,2] = 2 * 8 = 16;
    [2,1] = 1 * 3 = 3;
    [6, 2, 1] = 1 * 9 = 9;
    从上述计算可见选定区间 [6] ,计算值为 36,则程序输出为 36。 区间内的所有数字都在[0, 100]的范围内;

输入输出
  • 输入描述:
    第一行输入点集的个数 N, 接下来 N 行,每行两个数字代表点的 X 轴和 Y 轴。
    对于 50%的数据, 1 <= N <= 10000;
    对于 100%的数据, 1 <= N <= 500000;
  • 输出描述:
    输出“最大的” 点集合, 按照 X 轴从小到大的方式输出,每行两个数字分别代表点的 X 轴和 Y轴。
  • 输入例子1:
    5
    1 2
    5 3
    4 6
    7 5
    9 0
  • 输出例子1:
    4 6
    7 5
    9 0
解决方案:
  • 理解:
    如果x满足P中任意点都不在x的右上方区域内(横纵坐标都大于x),则称其为“最大的”-> 不存在任何点其横纵坐标都大于点x ->
  • 分析:
    1.对所有点x轴进行降序排序,则第一个点一定是最大点
    2.后面的点要想成为最大点,只需其y值大于前面的最大的y值即可
    3.最后倒序输出数组
if __name__ == "__main__":n = int(input())
# 二维数组输入方式a = []for _ in range(n):  # ’_’作用同i,循环标志a.append(list(map(int, input().split())))a.sort(key=lambda x: x[0])j = len(a) - 2tmpy = a[-1][1]for i in range(len(a) - 1, -1, -1):if tmpy < a[i][1]:tmpy = a[i][1]a[j] = a[i]j -= 1for k in range(j + 1, len(a)):print(a[k][0], a[k][1])

函数/方法

  • n=int(input(“[输入]>”))
    input()返回是一个字符串,int(input())把input()返回的字符串转换成整型,返回的是整型
  • str.split(str="", num=string.count(str)
    #通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,返回分割后的字符串列表。
    str = “Line1-abcdef \nLine2-abc \nLine4-abcd”;
    print str.split( ); # 默认以空格为分隔符,包含 \n \t
    print str.split(’ ', 1 ); # 以空格为分隔符,分隔成两个
  • map()
    根据提供的函数对指定序列做映射。map(function, iterable, …),第一个参数 function 以参数序列中的每一个元素调用function函数,返回包含每次 function函数返回值的新列表。
    map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
    [1, 4, 9, 16, 25]
  • list()方法
    list(tuple) 将元组转换为列表。
    注:元组与列表非常类似,区别在于元组的元素值不能修改,元组是放在括号()中,列表是放于方括号[]中。
    aTuple = (123, ‘runoob’, ‘google’, ‘abc’)
    aList = list(aTuple)
    print ("列表元素 : ")
    print(aList)
    列表元素 : [123, ‘runoob’, ‘google’, ‘abc’]
  • list.sort()
    sort(cmp = None ,key = None, reverse = False) 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。没有返回值,但是会对列表的对象进行排序。
    cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    key:可选参数,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)。
    list.sorted()有返回值,返回对key值排好序的list
问题二
  1. 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值:
    [6] = 6 * 6 = 36;
    [2] = 2 * 2 = 4;
    [1] = 1 * 1 = 1;
    [6,2] = 2 * 8 = 16;
    [2,1] = 1 * 3 = 3;
    [6, 2, 1] = 1 * 9 = 9;
    从上述计算可见选定区间 [6] ,计算值为 36,则程序输出为 36。 区间内的所有数字都在[0, 100]的范围内;
输入输出
  • 输入描述:
    第一行输入数组序列长度n,第二行输入数组序列。
    对于 50%的数据, 1 <= n <= 10000;
    对于 100%的数据, 1 <= n <= 500000;

  • 输出描述:
    输出数组经过计算后的最大值。

  • 输入例子1:
    3
    6 2 1

  • 输出例子1:
    36

思路

遍历每个数,并找出该数的最大区间,即该数在区间中最小,加总求积

if __name__ == "__main__":n = int(input())a = list(map(int, input().split()))ans = 0for i in range(n):tmp = a[i]l = r = iif tmp == 0:continuewhile l - 1 >= 0 and a[l - 1] >= tmp:l = l - 1while r + 1 < n and a[r + 1] >= tmp:r = r + 1ans= max(ans, tmp * sum(a[l: r + 1]))print(ans)
  • continue 语句跳出本次循环,而break跳出整个循环。
    continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环,用在while和for循环中。

【牛客刷题记录】2021-03-10相关推荐

  1. PYTHON 牛客刷题记录

    文章目录 一.牛客-简单类 1.HJ81 字符串字符匹配--SET使用 2.二维数组操作--map(),split()使用 3.HJ8 合并表记录--sorted().字典输出 4.HJ80 整型数组 ...

  2. 牛客刷题记录之语法入门循环结构篇1.0

    (一)1001-双层金字塔 (二)1002-数字三角形 题目描述 打印数字三角形,从1开始输出,第i行输出i个数,每个数字按4个位置输出 注:c语言中 %4d可以输出一个数,占据四个位置,右对齐. 输 ...

  3. 牛客刷题-Java面试题库【动态更新添加题目】(2023.06.19更新)

    讲在前面 ✨ 牛客刷题日记–理解为重中之重 刷题一方面是持续的了解到自己哪方面比较欠缺,另一方面也是从各大厂的面试题可以看出当前所需的技术栈的偏重点,持续的巩固基础和查漏补缺,一如代码深似海–学无止境 ...

  4. 【Shell牛客刷题系列】SHELL5 打印空行的行号:一起学习grep命令搭配正则表达式的使用

    该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令. 刷题链接:牛客题霸-Shell篇. 该系列文章都放到专栏下,专栏链接为:<专栏:Linux>.欢迎关注专栏~ 本 ...

  5. 【牛客刷题专栏】0x27:JZ29 顺时针打印矩阵(C语言编程题)

    前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失. 个人刷题练习系列专栏:个人CSDN牛客刷题专栏. 题目来自:牛客/题库 / 在线编程 / 剑 ...

  6. 最长上升子序列(LIS),牛客刷题

    目录: 最长上升子序列(LIS) 1.模板(数据较小) 2.模板(数据较大) 牛客刷题 1. 牛客练习赛107A:如见青山 2.牛客小白月赛65A牛牛去购物 3.牛客小白月赛65B牛牛去购物 4.牛客 ...

  7. 牛客刷题日记(2021-11-24)

    牛客刷题日记(2021-11-24) 题目: 下面程序的输出是:() String x="fmn"; x.toUpperCase(); String y=x.replace('f' ...

  8. 牛客刷题日记(2021-12-8)

    牛客刷题日记(2021-12-8) 题目: 以下哪个接口的定义是正确的?( )interface B { void print() { } ;}interface B { static void pr ...

  9. 【字节面试题】牛客刷题偶遇字节后端笔试面经 撸它

    想要看更加舒服的排版.更加准时的推送 关注公众号"不太灵光的程序员" 每日八点有干货推送,微信随时解答你的疑问 牛客刷题偶遇 字节后端笔试0715 撸它 一共两道编程题. 1. 给 ...

最新文章

  1. Robot Framework(十八) 支持工具
  2. 苹果竟放出“流氓” APP
  3. mysql对日期的操作_MySql对日期的操作
  4. Win11锁屏快捷键是什么 Win11锁屏的方法
  5. 自定义地图开发(一)
  6. Want To Say Something
  7. JAVA电影院售票系统毕业设计 开题报告
  8. linux IIC子系统分析(七)——实例分析通过i2c-dev操作I2C设备
  9. win10 动态磁盘 linux,windows10系统下基本磁盘变成动态磁盘了如何解决
  10. 使用poedit汉化wordpress的插件
  11. 微信小程序开发与公众号运营有什么区别
  12. OCP认证培训学校哪家比较好?您知道怎么选OCP培训机构吗
  13. 《一代大商孟洛川》经典台词
  14. UE4-目录结构简介
  15. 大数据项目实战——电信业务大数据分析系统
  16. 人工智能有哪些方向?什么方向有前景?
  17. 提示猜数字范围python_Python 猜数字游戏
  18. java匹配任意,java有关正则表示式,我想匹配一个字串中的任意字元,怎么办?...
  19. 如何快速查询SCI期刊JCR和ISO缩写?
  20. 计算机基础知识(基础入门小白专属)九

热门文章

  1. 数学建模 匈牙利算法求解整数规划基本原理与编程实现
  2. Dropbox推独立应用,公司估值已达100亿美元
  3. 别让6种不良心理偷走你的好人缘
  4. 编程语言大比拼——谁的效率高
  5. 高效程序员应该养成的七个习惯
  6. sql 查询结果为null替换 为 0
  7. 防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
  8. [Swift]LeetCode916.单词子集 | Word Subsets
  9. PLSQL安装教程,无需oracle客户端(解决本地需要安装oracle客户端的烦恼)
  10. 轻量高效的开源JavaScript插件和库 【转】