网易面试题疯狂队列python版

题目描述

小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的队列的疯狂值是最小的,他们当然决定按照疯狂值最大的顺序来进行列队。现在给出n个学生的身高,请计算出这些学生列队的最大可能的疯狂值。小易老师回来一定会气得半死。

输入描述:

输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),表示学生的人数
第二行为n个整数h[i](1 ≤ h[i] ≤ 1000),表示每个学生的身高

输出描述:

输出一个整数,表示n个学生列队可以获得的最大的疯狂值。

如样例所示:
当队列排列顺序是: 25-10-40-5-25, 身高差绝对值的总和为15+30+35+20=100。
这是最大的疯狂值了。

示例1

输入

复制

5
5 10 25 40 25

输出

复制

100

解题思路:先从k1取出最大的放k2中间,然后从k1左边取两个,分别放到k2的两边;再从k1右边取最后两个,分别放在k2的两边。k1随取随删。循环。输入 1 2 3 4 5 6 7 8 91:        92:      1 9 23:     7 1 9 2 84:   3 7 1 9 2 8 45:  5 3 7 1 9 2 8 4
有一点需要注意的就是可能会出现这样的一种特例,由于可能会有大量重复的数,再放入最后一个数的时候要注意,计算它放在最左侧或最右侧时与相邻的元素差值的绝对值,选择把它放在绝对值大的那一侧如 输入: 1 1 1 1 1 1 3 3 3 3 2 2 2 2

最后直接上代码
M= int(input())
k1 = [i for i in map(int, input().split())]
# M=15
# k1=[1,1,1,1,1,1,1,2,2,2,2,3,3,3,3]
# M=5
# k1=[5, 10, 25, 25, 40]
# M=8
# k1=[2,3,5,7,11,13,17,19]
result=0

if M>2:

    k1.sort()
    k2=[k1[-1]]
    del(k1[-1])

    lrbiao=1

    while k1:
        if len(k1)==1:
            if lrbiao==1:
                k2.insert(0,k1[0])
                break
            else:
                k2.append(k1[0])
                break

        if lrbiao==1:
            k2.insert(0,k1[0])
            del(k1[0])
            k2.append(k1[0])
            del(k1[0])
            lrbiao=0
        else:
            k2.insert(0,k1[-1])
            del(k1[-1])
            k2.append(k1[-1])
            del(k1[-1])
            lrbiao=1

    #最后两位相同的极端情况
    if abs(k2[-1]-k2[-2])<abs(k2[0]-k2[-1]):
        temp=k2[-1]
        k2.pop()
        k2.insert(0,temp)

    for x in range(M-1):
        result+=abs((k2[x+1]-k2[x]))

elif M==2:
    result=abs(k1[0]-k1[1])

print(result)

  

原文地址:https://www.cnblogs.com/duoba/p/12247575.html

时间: 2024-11-02 12:56:15

网易面试题疯狂队列python版的相关文章

阿里云-ONS-Help:消息队列 RocketMQ 版

ylbtech-阿里云-ONS-Help:消息队列 RocketMQ 版 1.返回顶部 1. 消息队列 RocketMQ 版 查看产品> 消息队列RocketMQ版是阿里云基于Apache RocketMQ构建的低延迟.高并发.高可用.高可靠的分布式消息中间件. 产品更新 常见问题 立即购买 学习路径 由浅入深,带您玩转消息队列RocketMQ版! 了解 消息队列RocketMQ版简介 产品简介 名词解释 适用场景 产品架构 产品定价 计费概述 资源包说明 欠费说明 成本对比 上手 快速入门 主

python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

python之simplejson,Python版的简单. 快速. 可扩展 JSON 编码器/解码器 simplejson Python版的简单. 快速. 可扩展 JSON 编码器/解码器 编码基本的 Python 对象层次结构: import simplejson as json print json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) print json.dumps("\"foo\bar") print json

微信支付SDK(python版)

最近一段时间一直在搞微信平台开发,最近的v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为 python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo 照葫芦画瓢就可以了. 我已经把代码放到github了,https://github.com/Skycrab/wzhifuSDK,我主要测试了JsApi调用方式,其它的调用方式并没有测试,如果你发现了bug,请多多pull request,我将不甚感激. 方便观看,代码贴于此.

编码的秘密(python版)

编码(python版) 最近在学习python的过程中,被不同的编码搞得有点晕,于是看了前人的留下的文档,加上自己的理解,准备写下来,分享给正在为编码苦苦了挣扎的你. 编码的概念 编码就是将信息从一种格式转换成另一种格式,计算机只认识二进制,简单的理解,将我们眼睛看到的文字转换为计算机能够识别的二进制格式视为编码,而二进制以某种编码格式转换为我们能看的文字的过程可以看成是解码.既然计算机只能认识二进制0,1,那么我们用的字母.数字和文字等是怎样和他们对应的呢?那就请继续看吧! python中查看

python 版 quicksort 快排

今天看了下苹果xml 解析,写了个小demo 心想还是 在博客上写点东西吧,毕竟很久很久都没有上来了 先上个效果图把 接下来 看下 工程目录图吧 本demo 分两种解析模式,一是苹果自带的, 首先先看下苹果自带的吧,工程文件为 NoteXMLParser 文件 ,另一种解析模式 是 NotesTBXMLParser文件 NoteXMLParser.h 文件代码如下 : // // NoteXMLParser.h // TestXML // // Created by choni on 14-5-

人脸验证算法Joint Bayesian详解及实现(Python版)

人脸验证算法Joint Bayesian详解及实现(Python版) Tags: JointBayesian DeepLearning Python 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如对代码有兴趣的请移步我的 Github. 如需转载,请附上本文链接,不甚感激!  http://blog.csdn.net/cyh_24/article/details/49059475 Bayesian Face Revis

使用webdriver打开本地浏览器--python版

背景:经常性的,在项目中我们需要打开不同配置的不同浏览器.在学习selenium的过程中,打开本地火狐和本地chrome是一个稍微麻烦的事情,网上的java版本资料很多,但是python版的不多,在这里,我研究了一份关于python版Selenium打开浏览器的文档,供自己备注,也希望给大家一些参考. 1.打开默认的火狐 browser = webdriver.Firefox() 2.打开本地配置的火狐 from selenium import webdriver from time impor

LAMP一键安装(Python版)

去年有出一个python整的LAMP自动安装,不过比较傻,直接调用的yum 去安装了XXX...不过这次一样有用shell..我也想如何不调用shell 来弄一个LAMP自动安装部署啥啥的..不过尼玛智商有限,没搞定,暂且分享一下 先说说目前的缺陷     这个脚本总体来说是调用一个字典,组成这个字典是最花费时间的,实际代码到是没几行,本来想把Nginx 的部署也加进去,什么memcached phpmyadmin apc 这样的常用组件作为功能加进去,尼玛,时间不够,只能打打酱油,包括最后我也

python版的短信轰炸机smsbomb----------上篇(post)

短信轰炸机的原理是利用一些用手机号注册且需要发送验证码的网站的漏洞,可以向任何人的手机号发送短信,当然短信内容,我们无法控制.所以主要工作还是寻找这样的网站,然后利用Fiddler或者HttpWatch分析请求,使用post还是get,数据格式是怎么样的等. 以http://topic.hongxiu.com/wap/为例: 然后随便填一个电话号码,进行抓包分析: 通过这个可以看出,请求方式是POST,点击webForms就可以看到发送的数据格式. 有了这些就很简单了,核心就是向服务器post数