• 作业帮面试题


    用左上和右下两个坐标点表示矩形(不考虑旋转的情况),给定两个矩形的坐标表示,(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
    
  • 相关阅读:
    小白专场-堆中的路径-python语言实现
    小白专场-堆中的路径-c语言实现
    集合及运算
    哈弗曼树与哈夫曼编码

    线性结构之习题选讲-ReversingLinkedList
    小白专场-是否同一颗二叉搜索树-python语言实现
    微信公众平台开发教程第1篇-新手解惑(转)
    GIT GUI的使用(转)
    Git操作指南(2) —— Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并(转)
  • 原文地址:https://www.cnblogs.com/hit-joseph/p/9507538.html
Copyright © 2020-2023  润新知