一 目录
不折腾的前端,和咸鱼有什么区别
目录 |
---|
一 目录 |
二 前言 |
三 解题及测试 |
四 LeetCode Submit |
五 解题思路 |
六 进一步思考 |
二 前言
-
难度:简单
-
涉及知识:数学
-
题目地址:https://leetcode-cn.com/problems/construct-the-rectangle/
-
题目内容:
作为一位web开发者,懂得怎样去规划一个页面的尺寸是很重要的。
现给定一个具体的矩形页面面积,你的任务是:
设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。
要求:
1. 你设计的矩形页面必须等于给定的目标面积。
2. 宽度 W 不应大于长度 L,换言之,要求 L >= W 。
3. 长度 L 和宽度 W 之间的差距应当尽可能小。
你需要按顺序输出你设计的页面的长度 L 和宽度 W。
示例:
输入: 4
输出: [2, 2]
解释: 目标面积是 4, 所有可能的构造方案有 [1,4], [2,2], [4,1]。
但是根据要求2,[1,4] 不符合要求; 根据要求3,[2,2] 比 [4,1] 更能符合要求. 所以输出长度 L 为 2, 宽度 W 为 2。
说明:
给定的面积不大于 10,000,000 且为正整数。
你设计的页面的长度和宽度必须都是正整数。
三 解题及测试
小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。
-
LeetCode 给定函数体:
/**
* @param {number} area
* @return {number[]}
*/
var constructRectangle = function(area) {
};
根据上面的已知函数,尝试破解本题吧~
确定了自己的答案再看下面代码哈~
index.js
/**
* @name 构造矩形
* @param {number} area
* @return {number[]}
*/
const constructRectangle = (area) => {
const harf = Math.ceil(Math.sqrt(area));
for (let i = harf; i <= area; i++) {
if (Number.isInteger(area / i)) {
return [i, area / i];
}
}
};
const area = 4;
console.log(constructRectangle(area));
node index.js
返回:
[2, 2]
四 LeetCode Submit
Accepted
* 50/50 cases passed (128 ms)
* Your runtime beats 48.35 % of javascript submissions
* Your memory usage beats 17.86 % of javascript submissions (34.9 MB)
五 解题思路
首先,稍微思考,写出代码:
/**
* @name 构造矩形
* @param {number} area
* @return {number[]}
*/
const constructRectangle = (area) => {
const harf = Math.ceil(Math.sqrt(area));
for (let i = harf; i <= area; i++) {
if (Number.isInteger(area / i)) {
return [i, area / i];
}
}
};
const area = 2;
console.log(constructRectangle(area));
然后,尝试提交:
Accepted
* 50/50 cases passed (128 ms)
* Your runtime beats 48.35 % of javascript submissions
* Your memory usage beats 17.86 % of javascript submissions (34.9 MB)
最后,讲下思路:
-
首先,最极端的状况肯定是:2 * 2 或者 3 * 3 等,所以先开方
area
,再向上取整。 -
然后,从开方的地方开始,到
area
结束,进行遍历。 -
最后,判断
area
是否能整除i
,如果可以,说明它们有故事,就可以给 good ending 了。
PS:为什么不需要最后再返回一个默认数组?因为任何正整数都可以被 1 整除啊!
六 进一步思考
那么,还能不能更进一步呢?毕竟上面的只打败了 48% 的运行时间,18% 的空间。
于是 jsliang 想了下,然后去 LeetCode 【题解】和【评论】查看了下,还真,没有……
果然大佬都是静悄悄做完然后从不留言的么……
如果小伙伴有更好的题解,欢迎评论留言私聊……
enm...好像上面话语会让人有些误解?!!!
不折腾的前端,和咸鱼有什么区别!
jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。
浪子神剑 会每天更新面试题,以面试题为驱动来带动大家学习,坚持每天学习与思考,每天进步一点!
扫描上方二维码,关注 jsliang 的公众号(左)和 浪子神剑 的公众号(右),让我们一起折腾!
jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。