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
}
总结
这四道题是补之前缺的,今天的四道题晚点继续写,软柿子捏差不多了,接下来不得不攻坚了