zoukankan      html  css  js  c++  java
  • 作业帮面试题

    用左上和右下两个坐标点表示矩形(不考虑旋转的情况),给定两个矩形的坐标表示,(rectangle1_left_x,rectangle1_left_y,rectangle1_right_x,rectangle1_right_y)和,(rectangle2_left_x,rectangle2_left_y,rectangle2_right_x,rectangle2_right_y),要求返回这两个矩形的重合部分的坐标表示,如果没有重合部分就直接返回(-1,-1,-1,-1)

    如图所示蓝色部分为重叠矩形,需要返回重叠矩形的左上角坐标和右下角坐标。

    这道题直接看上去比较简单,可以考虑枚举法,可以枚举出所有的case,

    如上图所示,枚举出所有六种情况,暴力解法,但是这个解法存在一些问题,首先要进行一个左边变化,让x坐标更小的矩形作为左边的矩形,x坐标更大的矩形作为右边的矩形,才能按照上面的6中情况进行处理,不然case数目又要double。另外由于变量名比较多,比较长,进行比较的时候,代码逻辑容易出问题,很容易写错。当然,如果思路清理,逻辑强的选手,应该没问题。

    这里的暴力解法我们就不在过多进行介绍。

    下面介绍一种更简单更优势的解法:

    直接把二维平面投影到一维线段上进行处理,从上面的图中观察到,直接对上面的图形分别在X,Y轴上做投影,两个坐标轴上的重叠部分,就是最后应该返回的答案。

    # /usr/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    
    def get_coinclude_line(x1_lelf, x1_right, x2_left, x2_right):
        if x1_lelf > x2_left:
            x1_lelf, x1_right, x2_left, x2_right = x2_left, x2_right, x1_lelf, x1_right
        if x1_lelf < x2_left < x1_right < x2_right:
            return [x2_left, x1_right]
        elif x1_lelf < x2_left < x2_right < x1_right:
            return [x2_left, x2_right]
        else:
            return [-1, -1]
    
    
    def func(rectangle1_left_x, rectangle1_left_y, rectangle1_right_x, rectangle1_right_y, rectangle2_left_x,
             rectangle2_left_y, rectangle2_right_x, rectangle2_right_y):
        x_line = get_coinclude_line(rectangle1_left_x, rectangle1_right_x, rectangle2_left_x, rectangle2_right_x)
        y_line = get_coinclude_line(rectangle1_left_y, rectangle1_right_y, rectangle2_left_y, rectangle2_right_y)
        if x_line==[-1,-1]or y_line==[-1,-1]:
            return [-1,-1,-1,-1]
        else:
            return x_line+y_line
    
  • 相关阅读:
    python3 进程_multiprocessing模块
    python3 线程_threading模块
    python3 异常处理
    python3 面向对象补充
    python3 多态,绑定方法与非绑定方法
    python3 uper(),继承实现原理,封装
    python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法
    python3 正则表达式re模块
    python3 json、logging、sys模块
    mysql查询练习
  • 原文地址:https://www.cnblogs.com/hit-joseph/p/9507538.html
Copyright © 2011-2022 走看看