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,重新开始累加;
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则是矩形的长,此时它们之间的差距最小;
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; }