网易2018校招(秋招)算法编程题之一-求经过K次操作的不稳定值及操作过程

本文主要是介绍网易2018校招(秋招)算法编程题之一-求经过K次操作的不稳定值及操作过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

用一些立方体堆成一些塔

定义:不稳定值为这些塔中最高的塔和最低的塔的高度差

为了让这些塔尽量稳定,进行如下操作:每次从某座塔上取下一块立方体,并放到另一座塔上

注意:不能放到原塔上

 

输入描述:

第一行两个数n,k(1<=n<=100, 1<=k<=1000)表示塔的数量以及最多操作次数

第二行n个数,ai(1<=ai<=10^4)表示第i座塔的初始高度

 

输出描述:

第一行两个数s,m,表示最小的不稳定值和操作次数(m<=k)

接下来的m行,每行两个数x,y表示从第x座塔上取下一块立方体放到第y座塔上

 

示例:

输入

3 2

5 8 5

输出

0 2

2 1

2 3

 

思路:

 

先定义一个更新塔高度的函数,输入为所有塔的高度,输出为更新操作之后塔的高度,以及操作后的不稳定值,操作过程

再定义一个小于操作数的范围,去进行迭代更新,终止条件为不稳定值为0或者操作数等于允许最大操作数

 

代码如下:

# -*- coding:utf-8 -*-
import numpy as np
class Solution:### 迭代操作def Find(self, tower, values):# write code herea = np.zeros((values[1]))b = np.zeros((values[1]))for i in range(values[1]):tower, value, a[i], b[i] = s.update(tower)if value == 0:return i+1, value, a, breturn values[1], value, a, b### 更新塔高度 并返回更新操作之后塔的高度,以及操作后的不稳定值,操作过程def update(self, tower):maxinum = max(tower)mininum = min(tower)maxindex = tower.index(maxinum)minindex = tower.index(mininum)tower[maxindex], tower[minindex] = maxinum-1, mininum+1return tower, max(tower)-min(tower), maxindex, minindexwhile True:try:s = Solution()### 数据输入 与 处理values = input()tower = input()values = values.split(' ')tower = tower.split(' ')values[0], values[1] = eval(values[0]), eval(values[1])for i in range(values[0]):tower[i] = eval(tower[i])### 计算opra_num, num, x, y = s.Find(tower, values)### 输出print(num, opra_num)for i in range(opra_num):print((int(x[i])+1), (int(y[i])+1))except:break

 

这篇关于网易2018校招(秋招)算法编程题之一-求经过K次操作的不稳定值及操作过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340921

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件