题目

David has several containers, each with a number of balls in it. He has just enough containers to sort each type of ball he has into its own container. David wants to sort the balls using his sort method.

附上链接:Organizing Containers of Balls

写在前面

这种题一般我自己搞下来就是很懵的,因为它逻辑相对不清晰,没办法让人很快想清楚该用什么样的方法解决它。

所以我一般都会有个似乎对的思路就往下做,最后报error了再返回找逻辑上的错误,这就导致我经常需要全部从头来过。。。本题基本就是这样

解题思路

我错误的想法就不多说了,直接从正确的开始~

首先我们要明确一点,因为交换时拿走m个球就要拿回来m个球,所以每个容器中球的个数始终是不变

最终要实现在任意次交换后实现每个容器中只放一种类型的球,那么容易得到每种类型的球的数量是与最终放置它们的那个容器中的球数一致的(废话)

也就是说每种类型的球的数量是与每个容器初始的球数一致的

这样思路就很清晰了,我们只要把每种球的数量算出来,每个容器的初始球数算出来,若能相匹配,则可以实现交换;否则不能实现交换。

代码实现

传入的container参数是一个二维列表,每行代表这一容器中各类型球的数量,每列则代表着一种类型的球在各个容器中的分布

这样一说事情就很清晰了,只需要对行列分别求和就能得到上面分析中我们所需要的东西

这里的求和我也是经过查找资料发现,只要经过两层循环就可以实现。这里我之前用的三层循环实现的,感觉很累赘,就查了一下资料,发现果然是可以化简的,而且化简方式还很棒(新手,大佬勿喷),让我深深地感受到了代码的魅力

实现如下

mr = []
mc = []
for i in range(len(container)):
mr.append(sum(container[i]))
tot = 0
for j in range(len(container)):
tot += container[j][i]
mc.append(tot)

就这样,就把两组需要的数值存进了两个列表中

接下来,只要对两个数组进行排序,进行比较就完成了

最终程序

def organizingContainers(container):
mr = []
mc = []
for i in range(len(container)):
mr.append(sum(container[i]))
tot = 0
for j in range(len(container)):
tot += container[j][i]
mc.append(tot)
mr.sort()
mc.sort()
if mr == mc:
return 'Possible'
else:
return 'Impossible'

Organizing Containers of Balls的更多相关文章

  1. 〈一〉ElasticSearch的介绍

    目录 什么是ElasticSearch 核心能力 ES的搜索核心 搜索引擎选择 搜索的处理 补充: 小节总结: 基本学习环境搭建 如何操作ElasticSearch 下载.安装和运行(Based Wi ...

  2. IBM Bluemix体验:Containers持久存储

    上一篇介绍了在Bluemix Containers服务中使用docker hub镜像和container的高可用配置.接下来我们尝试如何在容器中使用持久存储. 在Bluemix的Containers服 ...

  3. IBM Bluemix体验:Containers进阶

    上一篇中介绍了Bluemix的Containers服务以及如何使用自定义的docker image创建一个容器实例并对外提供服务.除了自定义镜像之外,Bluemix Containers还可以使用Do ...

  4. IBM Bluemix体验:Containers

    国际版的Bluemix目前有三个region,US South,United Kingdom和Sydney.其中US South是功能最全的,UK其次,Sydney功能最少.Containers服务在 ...

  5. Codeforces554 C Kyoya and Colored Balls

    C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...

  6. 13 Balls Problem

    今天讨论的是称球问题. No.3 13 balls problem You are given 13 balls. The odd ball may be either heavier or ligh ...

  7. Docker-2:network containers

    docker run -d -P --name web training/webapp python app.py # -name means give the to-be-run container ...

  8. Containers Reserved yarn resourcemanager

    yarn rm的管理页面中显示了集群的概况,其中有一个指标叫Containers Reserved . 预留的容器,为什么会预留,集群的资源使用饱合,新的app请求的资源一般会进入pending状态, ...

  9. Docker Network containers

    Network containers Estimated reading time: 5 minutes If you are working your way through the user gu ...

随机推荐

  1. CentOS 7.4安装telnet服务端

    CentOS 7.4安装telnet服务端 安装xinetd服务 # yum -y install xinetd 安装telnet-server # yum -y install telnet-ser ...

  2. shell 跟踪命令

    添加跟踪 set -x 去除跟踪 set +x

  3. 封装tab切换事件

    HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  4. 13-python基础—python3中的map()

    map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. 通俗解释: m ...

  5. springCloud的使用01-----服务的注册和发现

    1 搭建eureka注册服务器 1.1 创建springboot项目,导入相应的jar包依赖 <project xmlns="http://maven.apache.org/POM/4 ...

  6. 2018-2-13-win10-uwp-活动磁贴

    title author date CreateTime categories win10 uwp 活动磁贴 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17: ...

  7. 2018-8-10-win10-UWP-ListView-

    title author date CreateTime categories win10 UWP ListView lindexi 2018-08-10 19:16:53 +0800 2018-2- ...

  8. node.js提供的服务器live-server的使用

    安装node.js的版本控制工具nvm,在终端中执行 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/instal ...

  9. linux配置java环境变量(详细)(转)

    linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586. ...

  10. java中继承条件下构造方法的执行过程

    继承条件下构造方法的调用规则如下: 情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法.在这种 ...