11. 盛最多水的容器
题目细节可自行点进去了解,大概意思就是给了一组素组为容器的高度,选取数组中两个元素作为高度,下标差作为宽度组成一个最大面积的容器
示例如下图
我的解法,采用双指针,对下标两边高度进行比对,小的就进行移动,每次计算面积并记录,具体流程可看如下动图
在指针变动时,需要注意,高度总是要选取两个高度中小的那个,这样水才不会溢出
var maxArea = function(height) {
let left = 0, right = height.length-1, maxArea = 0;
while(left < right){
// 计算面积
let area = Math.min(height[left],height[right]) * (right-left)
//记录最大面积
maxArea = Math.max(maxArea,area)
//根据height高度移动指针
if(height[left] > height[right]){
right--
}else{
left++
}
}
return maxArea
};
// 这里多(right-left) 表示的是宽度哈
将一维数组转变成二维数组
给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。 original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。
这题没有啥技巧,暴力解就完事了,为什么贴在这呢,是因为过节能有简单题刷,心情确实有被好到
var construct2DArray = function(original, m, n) {
// 因为original中给的元素不够分配返回空数组
if(original.length !== m *n){
return []
}
// 构建以m为长度的二维数组
let arr = new Array(m).fill(0).map(() => new Array(n).fill(0)),idx=0
// 双重循环遍历搞定
for(let i = 0; i < arr.length; i++){
for(let j = 0 ; j < arr[i].length; j++){
arr[i][j] = original[idx++]
}
}
return arr
};