贪心解法
一次遍历
贪心解法,总是做出当前我们认为最优的选择,对于本题贪心的选择就是选择边长最长的长方形
题意,我们要找出长度最长的长方形个数
我们使用 maxLen
记录目前最大正方形的长度,res
记录最大正方形的个数
从前相后开始扫描数组,对于某一项,该长方形的最小长度(能形成正方形的长度)k
- 如果 k < maxLen,因为我们要选择的边长最长的,而k小于maxlen不符合题意,舍去这一项
- 如果 k == maxLen, 和我们最长的相等,那么最长正方形的个数+1, res++
- 如果 k > maxLen,我们贪心选择的是最长的正方形,而当前k大于了最长的,那么我们res统计的是边长为maxLen的
正方形个数,而maxLen < k, 所以之前的全部要舍去, 令maxLen = k, res = 1
代码如下
public int countGoodRectangles2(int[][] rectangles) {
int maxLen = 0, res = 0;
for (int i = 0; i < rectangles.length; i++) {
int currMinLen = Math.min(rectangles[i][0], rectangles[i][1]);
if (currMinLen > maxLen) {
maxLen = currMinLen;
res = 1;
} else if(currMinLen == maxLen) {
res++;
}
}
return res;
}