LC 59-螺旋矩阵2
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
解题思路:根据左开右闭思想,依次对 上、右、下、左进行循环赋值,直到 num 等于n2 为止
代码:
var generateMatrix = function(n) { // 创建一个 n * n 的数组 const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0)); let num = 1; //设立初始值为 1 let left = 0, right = n - 1, top = 0, bottom = n - 1; //定义左右上下的初始值 while (num <= n * n) { //判断是否还进行循环 for (let i = left; i <= right; i++) { //先循环上面一行 matrix[top][i] = num num++ } top++; for (let i = top; i <= bottom; i++) { //右边 matrix[i][right] = num num++; } right--; for (let i = right; i >= left; i--) { //下面 matrix[bottom][i] = num num++; } bottom--; for (let i = bottom; i >= top; i--) { //左边 matrix[i][left] = num num++; } left++; } return matrix; };
LC 152-乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。
子数组 是数组的连续子序列。
示例 1:
输入: nums = [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: nums = [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
解题思路:需要考虑数值的正负问题。所以要找出每个小范围内的最小值与最大值,然后进行比对。最后得出整个数组的最大值
代码:
var maxProduct = function(nums) { let res = nums[0]; //最后要输出的结果 let maxs = nums[0]; //存储最大值 let mins = nums[0]; //存储最小值 let temp1 = 0, temp2 = 0; //中间存储量 for(let i = 1; i < nums.length; i++) { temp1 = maxs * nums[i]; temp2 = mins * nums[i]; maxs = Math.max(temp1, temp2, nums[i]); mins = Math.min(temp1, temp2, nums[i]); res = Math.max(maxs, res); } return res; };