LeetCode 75 - 01 : 最小面积矩形

这篇具有很好参考价值的文章主要介绍了LeetCode 75 - 01 : 最小面积矩形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LeetCode 75 - 01 : 最小面积矩形,leetcode,leetcode,哈希算法,算法

type pair struct{
  x, y int
}

func minAreaRect(points [][]int)int{
  mp := map[pair]struct{}{}
  // 将二维数组中的坐标映射到map中
  for i := range points{
    mp[pair{points[i][0], points[i][1]}] = struct{}{}
  }
  // 将结果设置为一个最大值,防止影响求最小值的逻辑
  res := math.MaxInt64
  for i := range points{
      for j := i + 1; j < len(points); j++{
        if points[i][0] == points[j][0] || points[i][1] == points[j][1]{
          continue
        }
        _, a := mp[pair{points[i][0], points[j][1]}]
        _, b := mp[pair{points[j][0], points[j][1]}]
        if a && b {
              area := getArea(points[i], points[j])
              if area < res{
                res = area
              }
        }
      }
  }
  if res == math.MaxInt64{
    return 0
  }
  return res
}

func getArea(p1, p2 []int) int{
  x := p1[0] - p2[0]
  if x < 0 {
    x *= -1
  }
  y := p1[1] - p2[1]
  if y < 0{
    y *= -1
  }
  return x * y
}

总结:

解题思路:一个矩形可以通过一条对角线也就是两个点唯一确认。那么可以先将所有的点加入哈希表,然后枚举两个点,如果这两个点x坐标和y坐标都不一致就可以构成一条对角线。最后判断由这条对角线确定的矩形的另外两个点是否在哈希表中,如果存在就是一个合法的矩形并更新最小面积。
要点

将结果设置为一个最大值,防止影响求最小值的逻辑

 res := math.MaxInt64

将二维数组中的坐标映射到map中文章来源地址https://www.toymoban.com/news/detail-731313.html

for i := range points{
    mp[pair{points[i][0], points[i][1]}] = struct{}{}
  }

到了这里,关于LeetCode 75 - 01 : 最小面积矩形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法leetcode|84. 柱状图中最大的矩形(rust重拳出击)

    给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 1 = heights.length =10 5 0 = heights[i] = 10 4 面对这道算法题目,二当家的再次陷入了沉思。 眼睛一看似乎有思路,但是一动手就容易不知

    2024年02月08日
    浏览(67)
  • 939. 最小面积矩形;2166. 设计位集;2400. 恰好移动 k 步到达某一位置的方法数目

    939. 最小面积矩形 核心思想:枚举矩形的右边那条边的两个点,并用一个哈希表存储相同纵坐标的最近出现的列的列数,不断更新最近出现的左边那条边。  2166. 设计位集 核心思想:这题主要是时间复杂度的优化,用一个flag来标记当前翻转了奇数次1还是偶数次0,这样就不用

    2024年02月12日
    浏览(45)
  • 算法leetcode|64. 最小路径和(rust重拳出击)

    给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明 :每次只能向下或者向右移动一步。 m == grid.length n == grid[i].length 1 = m, n = 200 0 = grid[i][j] = 200 面对这道算法题目,二当家的再次陷入了沉思。 这道题和62. 不同

    2024年02月15日
    浏览(47)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月15日
    浏览(39)
  • 算法leetcode|76. 最小覆盖子串(rust重拳出击)

    给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 \\\"\\\" 。 注意 : 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是唯

    2024年02月10日
    浏览(63)
  • 【算法|动态规划No.17】leetcode64. 最小路径和

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月07日
    浏览(49)
  • 【LeetCode题目详解】第九章 动态规划part01 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 (day38补)

    斐波那契数  (通常用  F(n) 表示)形成的序列称为 斐波那契数列 。该数列由  0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: 给定  n ,请计算 F(n) 。 示例 1: 示例 2: 示例 3: 提示: 0 = n = 30 斐波那契数列大家应该非常熟悉不过了,非常适合作为动规第

    2024年02月07日
    浏览(47)
  • 【算法|滑动窗口No.1】leetcode209. 长度最小的子数组

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月08日
    浏览(42)
  • LeetCode算法心得——k-avoiding 数组的最小总和(标记数组)

    大家好,我是晴天学长,这是一个细节题和一部分的思维题哈! 2) .算法思路 k-avoiding 数组的最小总和 1,填充一个1到n 的Boolean的数组 要n个数,但是数组大小不能确定。 所以建立1000的大小。 2.遍历筛选,如果数组中有这个的话,标记为false。 3.监测是否是false,true就sum++(前

    2024年02月11日
    浏览(46)
  • 【手撕算法|动态规划系列No.3】leetcode746. 使用最小花费爬楼梯

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包