【Leetcode -485.最大连续1的个数 -492.构造矩形】

2024-03-01 09:51:53 浏览数 (2)

Leetcode -485.最大连续1的个数

题目:给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例 1: 输入:nums = [1, 1, 0, 1, 1, 1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2: 输入:nums = [1, 0, 1, 1, 0, 1] 输出:2

思路是遍历一次数组,如果是1就使用变量count累加,每次累加完与变量max判断谁大,谁大max就取谁;如果是0,count就清0,重新开始累加;

代码语言:javascript复制
		int findMaxConsecutiveOnes(int* nums, int numsSize)
		{
		    int count = 0, max = 0;
		
		    //遍历数组
		    for (int i = 0; i < numsSize; i  )
		    {
		        //如果是1,count就累加
		        if (nums[i])
		            count  ;
		
		        //如果是0,count从0开始重新计算
		        else
		            count = 0;
		
		        //每次nums[i]是1,count累加完,就判断 max与count谁大,谁大就取谁
		        max = count > max ? count : max;
		    }
		    return max;
		}

Leetcode - 492.构造矩形

题目:作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。

要求: 你设计的矩形页面必须等于给定的目标面积。 宽度 W 不应大于长度 L ,换言之,要求 L >= W 。 长度 L 和宽度 W 之间的差距应当尽可能小。 返回一个 数组 [L, W],其中 L 和 W 是你按照顺序设计的网页的长度和宽度。

示例1: 输入 : 4 输出 : [2, 2] 解释 : 目标面积是 4, 所有可能的构造方案有[1, 4], [2, 2], [4, 1]。 但是根据要求2,[1, 4] 不符合要求; 根据要求3,[2, 2] 比[4, 1] 更能符合要求.所以输出长度 L 为 2, 宽度 W 为 2。

示例 2: 输入: area = 37 输出 : [37, 1]

示例 3 : 输入 : area = 122122 输出 : [427, 286]

思路是因为area = L * W,所以L = area/W;area是可以被W整除的,我们需要寻找面积area开方后,第一个可以整除area的数,这个数就是宽W,而L = area/W则是矩形的长,此时它们之间的差距最小;

代码语言:javascript复制
		int* constructRectangle(int area, int* returnSize)
		{
		    //只需要返回两个数,所以两个整型空间足矣
		    int* ans = (int*)malloc(sizeof(int) * 2);
		    *returnSize = 2;
		
		    //因为 area = L * W,所以L = area/W;area是可以被W整除的
		    //L * W = area >= W * W,所以有 W <= sqrt(area),
		    //所以我们需要判断 W = sqrt(area)后,是否可以整除area,若可以L = area/W;否则,W一直减减再判断
		    int W = sqrt(area);
		    while (area % W)
		    {
		        W--;
		    }
		
		    ans[0] = area / W;
		    ans[1] = W;
		
		    return ans;
		}

0 人点赞