Determine overlapping rectangles
On-Site Question 3 - SOLUTION
Problem
Given two rectangles, determine if they overlap. The rectangles are defined as a Dictionary, for example:
r1 = {
# x and y coordinates of the bottom-left corner of the rectangle
'x': 2 , 'y': 4,
# Width and Height of rectangle
'w':5,'h':12}
If the rectangles do overlap, return the dictionary which describes the overlapping section
Requirements
Make sure the dictionary you output is in the same form as the input.
Feel free to use an IDE for the code, but make sure you use paper/pencil or whiteboard to draw out your plan and logic
Solution
This is a problem where it helps a lot to draw out your thinking. There are a few things we will need to think about:
- How can we determine an intersection?
- What if a rectangle is fully inside another rectangle?
- What if there is no intersection, but the rectangles share an edge?
The key to solving this problem is to break it up in to sub-problems. We can split up the problem into an x-axis problem and a y-axis problem.
We will create a function that can detect overlap in 1 dimension. Then we will split the rectangles into x and width, and y and height components. We can then determine that if there is overlap on both dimensions, then the rectangles themselves intersect!
In order to understand the calc_overlap function, draw out two flat lines and follow along with the function and notice how it detects an overlap!
Let's begin by creating a general function to detect overlap in a single dimension:
def calc_overlap(coor1,dim1,coor2,dim2):
"""
Takes in 2 coordinates and their length in that dimension
""" # Find greater of the two coordinates
# (this is either the point to the most right
# or the higher point, depending on the dimension) # The greater point would be the start of the overlap
greater = max(coor1,coor2) # The lower point is the end of the overlap
lower = min(coor1+dim1,coor2+dim2) # Return a tuple of Nones if there is no overlap if greater >= lower:
return (None,None) # Otherwise, get the overlap length
overlap = lower-greater return (greater,overlap)
Now let's use this function to detect if the rectangles overlap!
def calc_rect_overlap(r1,r2):
x_overlap, w_overlap = calc_overlap(r1['x'],r1['w'],r2['x'],r2['w'])
y_overlap, h_overlap = calc_overlap(r1['y'],r1['h'],r2['y'],r2['h'])
# If either returned None tuples, then there is no overlap!
if not w_overlap or not h_overlap:
print 'There was no overlap!'
return None
# Otherwise return the dictionary format of the overlapping rectangle
return { 'x':x_overlap,'y': y_overlap,'w':w_overlap,'h':h_overlap}
Our solution is O(1) for both time and space! Let's see it in action:
r1 = {'x': 2 , 'y': 4,'w':5,'h':12}
r2 = {'x': 1 , 'y': 5,'w':7,'h':14}
calc_rect_overlap(r1,r2)
{'h': 11, 'w': 5, 'x': 2, 'y': 5}
Make sure to review the answer and practice writing it out by hand!
Good Job!
Determine overlapping rectangles的更多相关文章
- Overlapping rectangles判断两个矩形是否重叠的问题 C++
Given two rectangles, find if the given two rectangles overlap or not. A rectangle is denoted by pro ...
- 2017ICPC南宁赛区网络赛 Overlapping Rectangles(重叠矩阵面积和=离散化模板)
There are nnn rectangles on the plane. The problem is to find the area of the union of these rectang ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles
There are nn rectangles on the plane. The problem is to find the area of the union of these rectangl ...
- 2017 ACM/ICPC 南宁区 网络赛 Overlapping Rectangles
2017-09-24 20:11:21 writer:pprp 找到的大神的代码,直接过了 采用了扫描线+线段树的算法,先码了,作为模板也不错啊 题目链接:https://nanti.jisuanke ...
- 计蒜客 Overlapping Rectangles (离散化)
题意: 给定一个坐标系, 给出n个矩形的左下角坐标(bx,by)和右上角坐标(tx,ty) , 求矩形覆盖的面积, 有些区域会被多个矩形覆盖, 但只用算一次. n <= 1000, 0 < ...
- 2017 icpc 南宁网络赛
2000年台湾大专题...英语阅读输入输出专场..我只能说很强势.. M. Frequent Subsets Problem The frequent subset problem is define ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
02Train Seats Reservation 问答 只看题面 33.87% 1000ms 131072K You are given a list of train stations, say ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 (B,F,L,M)
B. Train Seats Reservation You are given a list of train stations, say from the station 1 to the sta ...
- R绘图基础
一,布局 R绘图所占的区域,被分成两大部分,一是外围边距,一是绘图区域. 外围边距可使用par()函数中的oma来进行设置.比如oma=c(4,3,2,1),就是指外围边距分别为下边距:4行,左边距3 ...
随机推荐
- LSTM(Long Short-Term Memory)长短期记忆网络
1. 摘要 对于RNN解决了之前信息保存的问题,例如,对于阅读一篇文章,RNN网络可以借助前面提到的信息对当前的词进行判断和理解,这是传统的网络是不能做到的.但是,对于RNN网络存在长期依赖问题,比如 ...
- jackson的小知识
- as3 有趣现象 关于声明与变量
当使用了一个变量,并且前后期都没有在有效域内对此声明,不管有没有赋值,都会报错. 但先使用了一个变量,后期在有效域内对此声明,那么此变量不报错,但在声明之前没有赋值,那么赋值默认值:如果使用变量时,赋 ...
- c#之using关键字
1.using可以引入命名空间: 2.在using语句里声明的变量,使用完后会自动调用Dispose方法(实现IDisposable接口). using 语句允许程序员指定使用资源的对象应当何时释放资 ...
- nginx 无法访问root权限的文件内容
问题: 按照的nginx,nginx配置的user 是 nginx,nginx 是root用户启动的. 文件夹A放的那啥是root用户上传的文件. 可 nginx 无法访问 到 文件. 方法: ...
- Jsonlib 属性过滤器
/** * @title JSON转换属性过滤器 * @description 用于JSON lib的JSON转换 * @author maohuidong * @date 2017-04-06 */ ...
- How To Pronounce 3-Syllable Phrases
How To Pronounce 3-Syllable Phrases Share Tweet Share Tagged With: 3-Syllable Learn about the stress ...
- CPU Meltdown和Spectre漏洞分析
一.背景: 1月4日,国外爆出了整个一代处理器都存在的灾难性漏洞:Meltdown和Spectre. 几乎影响了全球20年内所有cpu处理器:这两个漏洞可以使攻击者通过利用并行运行进程的方式来破坏处理 ...
- css中选择器
css中常用的选择器有: 1.元素选择器:h1{} 如<h1></h1> 2.类选择器:.test{}或者h1.test{} 如<h1 class="test ...
- hadoop 链接 mysql
数据在hadoop服务器上,需要导入mysql 可以直接在hadoop上操作 要知道 mysql的 账号 密码 host 步骤: 进入shell 输入: mysql -u 'name' -p'pas ...