Organizing Containers of Balls
题目
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的更多相关文章
- 〈一〉ElasticSearch的介绍
目录 什么是ElasticSearch 核心能力 ES的搜索核心 搜索引擎选择 搜索的处理 补充: 小节总结: 基本学习环境搭建 如何操作ElasticSearch 下载.安装和运行(Based Wi ...
- IBM Bluemix体验:Containers持久存储
上一篇介绍了在Bluemix Containers服务中使用docker hub镜像和container的高可用配置.接下来我们尝试如何在容器中使用持久存储. 在Bluemix的Containers服 ...
- IBM Bluemix体验:Containers进阶
上一篇中介绍了Bluemix的Containers服务以及如何使用自定义的docker image创建一个容器实例并对外提供服务.除了自定义镜像之外,Bluemix Containers还可以使用Do ...
- IBM Bluemix体验:Containers
国际版的Bluemix目前有三个region,US South,United Kingdom和Sydney.其中US South是功能最全的,UK其次,Sydney功能最少.Containers服务在 ...
- Codeforces554 C Kyoya and Colored Balls
C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...
- 13 Balls Problem
今天讨论的是称球问题. No.3 13 balls problem You are given 13 balls. The odd ball may be either heavier or ligh ...
- Docker-2:network containers
docker run -d -P --name web training/webapp python app.py # -name means give the to-be-run container ...
- Containers Reserved yarn resourcemanager
yarn rm的管理页面中显示了集群的概况,其中有一个指标叫Containers Reserved . 预留的容器,为什么会预留,集群的资源使用饱合,新的app请求的资源一般会进入pending状态, ...
- Docker Network containers
Network containers Estimated reading time: 5 minutes If you are working your way through the user gu ...
随机推荐
- 深入理解finally关键字,Finally到底是在return前面执行还是在return后面执行
一:2种finally不会执行的情况 a.在try语句之前就return了 b.try语句中有System.exit();语句 二:finally语句在return执行之后,return返回之前执行 ...
- JeeSite使用(一)大步跑起来
背景:近期准备换个工作,想对之前自己写的代码进行重构,选择了JeeSite 需求:跑起来才是硬道理 方法:1.官方文档有坑,别信他 2.官方文档有坑,别信他 3.官方文档有坑,别信他 一 ...
- 条件选择case
SELECT COUNT(*),count(CASE b.AUTHORITY WHEN 'addAsmAccessControlList' THEN '1' ELSE NULL END) as aut ...
- 归并排序(Merge_Sort)
基本思想 建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 算法原理 归并操作指的是将两个已经排序的序列合并成一个序列的操作,归并 ...
- Linux防火墙设置——iptables
防火墙用于监控往来流量,并根据用户定义的规则来过滤数据包以保证安全.iptables是Linux下设置防火墙规则的常用工具,它可以让你设置.维护以及查看防火墙的规则表.你可以定义多个表,每个表可以包含 ...
- SNAT 和 DNAT
SNAT是原地址转换,DNAT是目标地址转换. SNAT 内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有ip.网关这个地址转换称为SNAT 企业内部的主机A想访问互联网上的 ...
- php操作redis--有序集合(sorted set)篇
常用函数:zAdd,zRange,zRem,zCard等. 应用场景:类似集合,可以提供一个优先级的参数来为成员排序,如:分数 连接 $redis = new Redis(); $redis-> ...
- leetcode-按奇偶排序数组II
Python解决方法: class Solution(object): def sortArrayByParityII(self, A): j = 1 for i in xrange(0, len(A ...
- Yii2 自定义组件
basic\components\HelloWidget namespace app\components; use yii\base\Widget; use yii\helpers\Html; cl ...
- Yii2 搜索
搜索的形式: 第一种,点击空白处: <?php $data=['0'=>'已删除','10'=>'正常','1'=>'锁定']; ?> <table style=' ...