https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Mock%20Interviews/Large%20E-Commerce%20Company/E-Commerce%20Company%20-%20Interview%20Problems%20-%20SOLUTIONS/On-Site%20Question%203%20-%20SOLUTION.ipynb

On-Site Question 3 - SOLUTION

Problem

Given two rectangles, determine if they overlap. The rectangles are defined as a Dictionary, for example:

In [2]:
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:

In [5]:
r1 = {'x': 2 , 'y': 4,'w':5,'h':12}
r2 = {'x': 1 , 'y': 5,'w':7,'h':14}
calc_rect_overlap(r1,r2)
Out[5]:
{'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的更多相关文章

  1. Overlapping rectangles判断两个矩形是否重叠的问题 C++

    Given two rectangles, find if the given two rectangles overlap or not. A rectangle is denoted by pro ...

  2. 2017ICPC南宁赛区网络赛 Overlapping Rectangles(重叠矩阵面积和=离散化模板)

    There are nnn rectangles on the plane. The problem is to find the area of the union of these rectang ...

  3. 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 ...

  4. 2017 ACM/ICPC 南宁区 网络赛 Overlapping Rectangles

    2017-09-24 20:11:21 writer:pprp 找到的大神的代码,直接过了 采用了扫描线+线段树的算法,先码了,作为模板也不错啊 题目链接:https://nanti.jisuanke ...

  5. 计蒜客 Overlapping Rectangles (离散化)

    题意: 给定一个坐标系, 给出n个矩形的左下角坐标(bx,by)和右上角坐标(tx,ty) , 求矩形覆盖的面积, 有些区域会被多个矩形覆盖, 但只用算一次. n <= 1000,  0 < ...

  6. 2017 icpc 南宁网络赛

    2000年台湾大专题...英语阅读输入输出专场..我只能说很强势.. M. Frequent Subsets Problem The frequent subset problem is define ...

  7. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛

    02Train Seats Reservation 问答 只看题面 33.87% 1000ms 131072K You are given a list of train stations, say ...

  8. 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 ...

  9. R绘图基础

    一,布局 R绘图所占的区域,被分成两大部分,一是外围边距,一是绘图区域. 外围边距可使用par()函数中的oma来进行设置.比如oma=c(4,3,2,1),就是指外围边距分别为下边距:4行,左边距3 ...

随机推荐

  1. 42. linux下数据库服务启动

    进到bin目录运行 emctl start dbconsole oracle@suse92:~> sqlplus /nolog SQL*Plus: Release 9.2.0.4.0 - Pro ...

  2. VBA 判断单元格是否为公式,可用于数组

    Function ISFORMULA(ByVal rg As Object) As Variant      Dim temp As Variant      Dim i As Integer, j ...

  3. Linux&Unix命令

    Linux下: 系统操作 文件操作 防火墙 权限管理 压缩和解压 安装应用 用户管理 端口 PID 应用 start & shutdown 远程操作 异常 注意点: linux系统下内容大多用 ...

  4. margin和padding的四种写法

    我们经常会看到CSS样式属性中外边距margin和内边距padding的各种用法,这里做一个小结,但只简单介绍margin,因为它们的用法大同小异. 方法一. margin:10px; //4个外边距 ...

  5. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks

    视频地址:https://www.cctalk.com/v/15114923888328 视图 Nunjucks 彩虹是上帝和人类立的约,上帝不会再用洪水灭人. 客户端和服务端之间相互通信,传递的数据 ...

  6. 专业英语词汇(Java)

    abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口, ...

  7. 最短路径-Dijkstra算法(转载)

    注意:以下代码 只是描述思路,没有测试过!! Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始 ...

  8. conductor 事件处理程序

    Introduction conductor中的事件提供工作流之间的松散耦合,并支持从外部系统生成和消耗事件. 包括: 1. 能够在外部系统像SQS或Conductor内部生成一个事件(消息). 2. ...

  9. 这两天的刷机+Root

    最近为了研究Xposed框架的搭建使用,将自己红米Note2尝试root后,开不了机了.后使用(网上下载的线刷宝,刷的官网线刷宝成功开机了,然后里面会自带很多软件,然后通过下载KingRoot将手机自 ...

  10. django1.8模板位置的设置setting.py

    大多数django教程比较老,给出的template的设置方案为: 更改工程下的setting.py文件, TEMPLATE_DIRS = (     os.path.join( APP_DIR, ' ...