刚看到本题时感觉难度不是很大,却出现在困难组里面。后面万万没想到提交测试的时候输入了将近20000条直线进行判断,如果直接上来就做的话,那肯定会:

接下来看题目:

题目

python代码

刚开始我的代码是直接做的,结果超时。

def minRecSize(lines):""":type lines: List[List[int]]:rtype: float"""x_list=[]y_list=[]for i in range(len(lines)):for j in range(i + 1, len(lines)):k1, b1 = lines[i]k2, b2 = lines[j]if k1 != k2:x = (b2 - b1) / (k1 - k2)y = ((b2 - b1) / (k1 - k2)) * k1 + b1x_list.append(x)y_list.append(y)if len(x_list)<2:return 0x_list.sort()y_list.sort()wideth=x_list[-1]-x_list[0]longth=y_list[-1]-y_list[0]area=wideth*longth# print(x_list)# print(y_list)# print(area)return area

原因就是我的做法将所有斜率不同的线两两求交点,这样的排列组合在两万条线的情况下……


所以要先处理输入的数据,做法:将所有斜率相同的直线,保留截距最大和最小的那两条,处理所有的直线,将处理后的结果存到新的list中作为上面代码的输入。

def deal(lines):k_dict={}new_lines=[]for k,b in lines:print(k,b)if k in k_dict:k_dict[k][0]=min(k_dict[k][0],b)k_dict[k][1]=max(k_dict[k][1],b)else:k_dict[k]=[b,b]print(k_dict)for key,val in k_dict.items():new_lines1=[]new_lines2=[]k=keyb1=val[0]b2=val[1]new_lines1.append(k)new_lines1.append(b1)new_lines2.append(k)new_lines2.append(b2)if new_lines1 not in new_lines:new_lines.append(new_lines1)if new_lines2 not in new_lines:new_lines.append(new_lines2)# print(len(new_lines))return new_linesdef minRecSize(lines):new_lines=deal(lines)print(new_lines)x_list=[]y_list=[]for i in range(len(new_lines)):for j in range(i + 1, len(new_lines)):k1, b1 = new_lines[i]k2, b2 = new_lines[j]if k1 != k2:x = (b2 - b1) / (k1 - k2)y = ((b2 - b1) / (k1 - k2)) * k1 + b1x_list.append(x)y_list.append(y)if len(x_list)<2:return 0x_list.sort()y_list.sort()wideth=x_list[-1]-x_list[0]longth=y_list[-1]-y_list[0]area=wideth*longthreturn area

继续超出时间限制

接着看到别人更简洁的代码,思路一致,但是省去了一些比较、排序所费的时间

def minRecSize(self, lines: List[List[int]]) -> float:if len(lines) <= 2:return 0dic = {}for k, b in lines:if k in dic:dic[k][0] = min(dic[k][0], b)dic[k][1] = max(dic[k][1], b)else:dic[k] = [b, b]if len(dic) == 1:return 0ks = sorted(dic.keys())n = len(ks)min_x = min_y = float('inf')max_x = max_y = float('-inf')for i in range(1, n):k1 = ks[i - 1]min_b1, max_b1 = dic[k1]k2 = ks[i]min_b2, max_b2 = dic[k2]diff_k = k1 - k2min_x = min(min_x, (max_b2 - min_b1) / diff_k)max_x = max(max_x, (min_b2 - max_b1) / diff_k)min_y = min(min_y, (k1 * max_b2 - k2 * min_b1) / diff_k)max_y = max(max_y, (k1 * min_b2 - k2 * max_b1) / diff_k)return (max_x - min_x) * (max_y - min_y)

力扣——LCP 37. 最小矩形面积(困难)相关推荐

  1. 20201023:力扣第37场双周赛(上)

    力扣第37场双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 删除某些元素后的数组均值 网络信号最好的坐标 思路与算法 第二题直接暴力就可以了,计算每个点的所有偏移量存入list,即以(0,0 ...

  2. 力扣算法之两矩形求和

    原题目 223. 矩形面积 给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积. 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay ...

  3. 岛屿类-网格类问题-DFS | 力扣695. 岛屿的最大面积

    思路参考上文: 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 本文讲解695. 岛屿的最大面积问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 题目 给定一个包含了一些 0 和 1 ...

  4. 力扣209-长度最小的子数组(Java,双指针解法)

    209. 长度最小的子数组 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/minimum-size-subarray ...

  5. 力扣209. 长度最小的子数组

    题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, ...

  6. #力扣LeetCode883. 三维形体投影面积 @FDDLC

    题目描述: 883. 三维形体投影面积 - 力扣(LeetCode) (leetcode-cn.com) Java代码: class Solution {public int projectionAr ...

  7. 力扣 LCP 42. 玩具套圈 (数学公式反推)

    题意 场地外,小力组织了一个套玩具的游戏.所有的玩具摆在平地上,toys[i] 以 [xi,yi,ri] 的形式记录了第 i 个玩具的坐标 (xi,yi) 和半径 ri.小扣试玩了一下,他扔了若干个半 ...

  8. 力扣883.三维体投影面积

    题目描述 在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体.每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 现在 ...

  9. 力扣 746 使用最小化花费爬楼梯

    文章目录 题目 思路 AC代码 收获 题目 使用最小化花费爬楼梯 思路 一个动态规划的题目,典型的多阶段求解最优解的问题.用dp数组存储对应的状态值,表示到第i个楼梯花费的最小体力. 做动态规划题的优 ...

最新文章

  1. asp.net 漂亮搜索框_推荐4款影视搜索工具,十一假期让你看剧看到爽
  2. mysqldatareader什么意思_MySqlDataReader在Using中使用
  3. Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
  4. 思考ANDROID架构(4):HOW-TO, 如何从API洞悉软件的话语权
  5. java map 查找_Map 查找表操作
  6. flutter 弹框 dialog,flutter提示框
  7. 生产中k8s适合mysql_在K8S集群中构建复杂的MySQL单实例数据库
  8. 全球AI人才只有2万多,仅3000人在求职 | 报告
  9. linux vi代码高亮,linux Vi编辑器代码高亮设置及永久显示行号的方法
  10. [Node.js]Domain模块
  11. 关于python项目路径导入自己写的库出错的一点思考
  12. PAL文件(Palette,调色板)及格式
  13. 黑苹果 Catalina 15 声卡定制
  14. PSpice瞬态分析、交流分析和灵敏度分析
  15. 「捷径」解读:iOS 自动化的 3.0 时代
  16. 解密猫晚直播技术:如何保障全球200多个国家和地区同时在线狂欢?
  17. Qt实现屏幕中间显示小点,打游戏瞬狙,你还在屏幕中间贴红点吗?
  18. 在安卓系统中集成YAHFA框架
  19. linux风扇转速,ubuntu系统调节GPU风扇转速
  20. 云南省增值税发票综合平台(新网址):https://fpdk.yunnan.chinatax.gov.cn/

热门文章

  1. python面向对象(特征,原则)01
  2. linux 软件部署工具下载,linux配置 yum管理应用软件 、 快速部署Web/FTP
  3. php能反序列化js的吗,javascript – 如何在node.js中反序列化PHP会话?
  4. hnu 暑期实训之蛇形矩阵
  5. 计算机网络 第三章 数据链路层
  6. 1010 一元多项式求导(C语言)
  7. 从零在阿里云服务器上部署一个Springboot博客网站
  8. 千万级测试String、StringBuffer和StringBuilder的速度
  9. EntityFramewrok 使用
  10. Jmeter学习笔记(三)文件上传