从零开始的力扣刷题记录-第八十二天

492. 构造矩形-简单

题目描述:
作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:
你设计的矩形页面必须等于给定的目标面积。
宽度 W 不应大于长度 L ,换言之,要求 L >= W 。
长度 L 和宽度 W 之间的差距应当尽可能小。
返回一个 数组 [L, W],其中 L 和 W 是你按照顺序设计的网页的长度和宽度。

题解:
写了个双指针,和昨天一道题思路一样,实际上官方题解有更好的解法,直接对area开根号后取小于它的最大数,不断循环判断能否被area整除,不能就减1,速度更快

代码(Go):

func constructRectangle(area int) []int {
    L := area
    W := 1
    re := make([]int,2)
    for W <= L{
        if L * W == area{
            re[0] = L
            re[1] = W
            W++
            L--
        }else if L * W > area{
            L--
        }else if L * W < area{
            W++
        }
    }
    return re
}

2124. 检查是否所有 A 都在 B 之前-简单

题目描述:
给你一个 仅 由字符 ‘a’ 和 ‘b’ 组成的字符串 s 。如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前,返回 true ;否则,返回 false 。

题解:
用一个标志位标记是否出现了b,出现b之后如果再出现a就返回false

代码(Go):

func checkString(s string) bool {
    flag := 1
    for _,v := range s{
        if v == 'b' && flag == 1{
            flag = 0
        }else if v == 'a' && flag == 0{
            return false
        }
    }
    return true
}

223. 矩形面积-中等

题目描述:
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。
每个矩形由其 左下 顶点和 右上 顶点坐标表示:
第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

题解:
我是ifelse穷举了所有情况的,比较蠢,所以放下官方题解

代码(Go):

func computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 int) int {
    area1 := (ax2 - ax1) * (ay2 - ay1)
    area2 := (bx2 - bx1) * (by2 - by1)
    overlapWidth := min(ax2, bx2) - max(ax1, bx1)
    overlapHeight := min(ay2, by2) - max(ay1, by1)
    overlapArea := max(overlapWidth, 0) * max(overlapHeight, 0)
    return area1 + area2 - overlapArea
}

func min(a, b int) int {
    if a > b {
        return b
    }
    return a
}

func max(a, b int) int {
    if b > a {
        return b
    }
    return a
}

240. 搜索二维矩阵 II-中等

题目描述:
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

题解:
和前天的题很类似,吸取教训用了二分法,没想到这题还有更简单的Z字形搜索

代码(Go):

func searchMatrix(matrix [][]int, target int) bool {
    for _,v := range matrix {
        i := sort.SearchInts(v, target)
        if i < len(v) && v[i] == target {
            return true
        }
    }
    return false
}

总结

这四道题是补之前缺的,今天的四道题晚点继续写,软柿子捏差不多了,接下来不得不攻坚了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值