Day03
算法每日一题
原题链接:https://leetcode.cn/problems/daily-temperatures/description/?envType=problem-list-v2&envId=2cktkvj
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
/**
* @param {number[]} temperatures - 数组,表示每天的温度
* @return {number[]} - 返回一个数组,表示每一天需要等待几天才能遇到更高的温度
*/
var dailyTemperatures = function(temperatures) {
let ans = []; // 用于存储结果的数组
let stack = []; // 用于存储温度索引的栈
// 遍历温度数组
for (let i = 0; i < temperatures.length; i++) {
ans[i] = 0; // 初始化结果数组的当前元素为0
// 当栈不为空且当前温度大于栈顶温度时,进行处理
while (stack.length && temperatures[stack[stack.length - 1]] < temperatures[i]) {
let prev = stack.pop(); // 弹出栈顶元素的索引
ans[prev] = i - prev; // 计算当前天数和之前天数的差值,并更新结果数组
}
stack.push(i); // 将当前索引压入栈
}
return ans; // 返回结果数组
};
单调栈:
单调栈是一种非常有效的数据结构,特别适用于解决需要在一组元素中找到下一个更大或更小元素的问题。单调栈的核心思想是通过维护一个栈,使得栈内的元素始终保持某种单调性(单调递增或单调递减),从而在遍历数组的过程中能够高效地找到所需的元素。
所以这道题我们使用了一个递减的单调栈来解决,依次遍历整个温度数组,如果当前温度比栈顶元素下标对应元素的值大,就说明我们找到了第一个比栈顶下标元素温度高的元素(因为如果比栈顶元素还小,我们会进行入栈),然后我们更新结果,出栈,继续处理栈顶元素,如果栈顶下标对应元素比当前元素还大,那我们就入栈。通过这样的处理就得到了我们想要的结果。
前端学习记录
webpack的css样式loader
需要注意的是,use里面的loader是从右向左的顺序执行的,use可以写多个loader,但是loader选项只能写一个loader。
// Node.js的核心模块,专门用来处理文件路径
const path = require("path");
module.exports = {
// 入口
// 相对路径和绝对路径都行
entry: "./src/main.js",
// 输出
output: {
// path: 文件输出目录,必须是绝对路径
// path.resolve()方法返回一个绝对路径
// __dirname 当前文件的文件夹绝对路径
path: path.resolve(__dirname, "dist"),
// filename: 输出文件名
filename: "main.js",
},
// 加载器
module: {
rules: [
{
test: /\.css$/, // 匹配css文件
// 执行顺序是从右往左执行 css-loader 再执行 style-loader
use: ["style-loader", "css-loader"],
}
],
},
// 插件
plugins: [],
// 模式
mode: "development", // 开发模式
};