当前位置: 首页 > news >正文

用javascript分类刷leetcode13.单调栈(图文视频讲解)

239. 滑动窗口最大值 (hard)

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 。

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值

[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
示例 2:

输入:nums = [1], k = 1
输出:[1]

提示:

1 <= nums.length <= 105
-104 <= nums[i] <= 104
1 <= k <= nums.length

方法1.优先队列

动画过大,点击查看

  • 思路:最大值问题我们可以采用大顶堆,具体就是维护一个大顶堆,初始的时候将0~k-1的元素加入堆中,存入的是值和索引的键值队,然后滑动窗口从从索引为k的元素开始遍历,将新进入滑动窗口的元素加堆中,当堆顶元素不在滑动窗口中的时候,不断删除堆顶堆元素,直到最大值在滑动窗口里。
  • 复杂度分析:时间复杂度O(nlogn),n是nums的长度,将一个元素加入优先队列的时间复杂度是logn,最坏的情况下所有元素都要入队,所以复杂度是nlogn。空间复杂度是O(n),最坏的情况下,所有元素都在队列中,所以是O(n)

js:

class Heap {constructor(comparator = (a, b) => a - b, data = []) {this.data = data;this.comparator = comparator;//比较器this.heapify();//堆化}heapify() {if (this.size() < 2) return;for (let i = Math.floor(this.size()/2)-1; i >= 0; i--) {this.bubbleDown(i);//bubbleDown操作}}peek() {if (this.size() === 0) return null;return this.data[0];//查看堆顶}offer(value) {this.data.push(value);//加入数组this.bubbleUp(this.size() - 1);//调整加入的元素在小顶堆中的位置}poll() {if (this.size() === 0) {return null;}const result = this.data[0];const last = this.data.pop();if (this.size() !== 0) {this.data[0] = last;//交换第一个元素和最后一个元素this.bubbleDown(0);//bubbleDown操作}return result;}bubbleUp(index) {while (index > 0) {const parentIndex = (index - 1) >> 1;//父节点的位置//如果当前元素比父节点的元素小,就交换当前节点和父节点的位置if (this.comparator(this.data[index], this.data[parentIndex]) < 0) {this.swap(index, parentIndex);//交换自己和父节点的位置index = parentIndex;//不断向上取父节点进行比较} else {break;//如果当前元素比父节点的元素大,不需要处理}}}bubbleDown(index) {const lastIndex = this.size() - 1;//最后一个节点的位置while (true) {const leftIndex = index * 2 + 1;//左节点的位置const rightIndex = index * 2 + 2;//右节点的位置let findIndex = index;//bubbleDown节点的位置//找出左右节点中value小的节点if (leftIndex <= lastIndex &&this.comparator(this.data[leftIndex], this.data[findIndex]) < 0) {findIndex = leftIndex;}if (rightIndex <= lastIndex &&this.comparator(this.data[rightIndex], this.data[findIndex]) < 0) {findIndex = rightIndex;}if (index !== findIndex) {this.swap(index, findIndex);//交换当前元素和左右节点中value小的index = findIndex;} else {break;}}}swap(index1, index2) {//交换堆中两个元素的位置[this.data[index1], this.data[index2]] = [this.data[index2], this.data[index1]];}size() {return this.data.length;}
}var maxSlidingWindow = function(nums, k) {let ans = [];let heap = new Heap((a, b) => b.val - a.val);//大顶堆for(let i=0;i<k-1;i++) heap.offer({val: nums[i], index: i});//初始的时候将0~k-1的元素加入堆中for(let i=k-1; i<nums.length; i++){//滑动窗口从从索引为k-1的元素开始遍历heap.offer({val: nums[i], index: i});//将新进入滑动窗口的元素加堆中//当堆顶元素不在滑动窗口中的时候,不断删除堆顶堆元素,直到最大值在滑动窗口里。while(heap.peek().index<=i-k) heap.poll();ans.push(heap.peek().val);//将在滑动窗口里的最大值加入ans}return ans;
}
方法2.单调队列

动画过大,点击查看

  • 思路:维护单调递减队列,当进入滑动窗口的元素大于等于队尾的元素时 不断从队尾出队,直到进入滑动窗口的元素小于队尾的元素,才可以入队,以保证单调递减的性质,当队头元素已经在滑动窗口外了,移除对头元素,当i大于等于k-1的时候,单调递减队头就是滑动窗口的最大值
  • 复杂度分析:时间复杂度O(n),n是nums的长度,每个元素入队一次。空间复杂度O(k),队列最多存放k大小的元素

js:

var maxSlidingWindow = function (nums, k) {const q = [];//单递减的双端队列const ans = [];//最后的返回结果for (let i = 0; i < nums.length; i++) {//循环nums//当进入滑动窗口的元素大于等于队尾的元素时 不断从队尾出队,//直到进入滑动窗口的元素小于队尾的元素,以保证单调递减的性质while (q.length && nums[i] >= nums[q[q.length - 1]]) {q.pop();}q.push(i);//元素的索引入队while (q[0] <= i - k) {//队头元素已经在滑动窗口外了,移除对头元素q.shift();}//当i大于等于k-1的时候,单调递减队头就是滑动窗口的最大值if (i >= k - 1) ans.push(nums[q[0]]);}return ans;
};

84. 柱状图中最大的矩形 (hard)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
示例 2:

输入: heights = [2,4]
输出: 4

提示:

1 <= heights.length <=105
0 <= heights[i] <= 104

  • 思路:准备单调递增栈存放数组下标,因为这样可以从栈顶找到左边第一个比自己小的下标,这样从当前下标出发到第一个比自己小的柱子的下标就是矩形面积的宽度,然后在乘当前柱子的高度就是面积,如果当前柱子大于栈顶的下标对应的柱子高度,就入栈,否则不断出栈,计算栈顶的柱子所能形成的矩形面积,然后更新最大矩形面积
  • 复杂度:时间复杂度O(n),n是heights的长度,数组里每个元素尽出栈一次。空间复杂度O(n),栈空间最多为n

动画过大,点击查看

js:

const largestRectangleArea = (heights) => {let maxArea = 0const stack = [] //单调递增栈 注意栈存的时下标heights = [0, ...heights, 0]    //在heights数组前后增加两个哨兵 用来清零单调递增栈里的元素   for (let i = 0; i < heights.length; i++) {//当前元素对应的高度小于栈顶元素对应的高度时while (heights[i] < heights[stack[stack.length - 1]]) {const stackTopIndex = stack.pop() //出栈maxArea = Math.max(               //计算面积 并更新最大面积maxArea,heights[stackTopIndex] * (i - stack[stack.length - 1] - 1)//高乘宽)}stack.push(i)//当前下标加入栈}return maxArea
}

85. 最大矩形 (hard)

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例 1:

输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
输出:6
解释:最大矩形如上图所示。
示例 2:

输入:matrix = []
输出:0
示例 3:

输入:matrix = [[“0”]]
输出:0
示例 4:

输入:matrix = [[“1”]]
输出:1
示例 5:

输入:matrix = [[“0”,“0”]]
输出:0

提示:

rows == matrix.length
cols == matrix[0].length
1 <= row, cols <= 200
matrix[i][j] 为 ‘0’ 或 ‘1’

方法1.单调栈

ds_106

  • 思路:84题的变种,从第一行到第n行形成的柱状图可以利用84题求解,然后循环每一行,计算以这一行为底的柱状图最大面积,然后更新最大矩形面积
  • 复杂度:时间复杂度O(mn),m、n分别是矩形的高度和宽度,循环m次行,每行里循环每个柱子的高度。空间复杂度O(n),heights数组的空间。

js:

var maximalRectangle = function (matrix) {if (matrix.length == 0) return 0;let res = 0;let heights = new Array(matrix[0].length).fill(0);//初始化heights数组for (let row = 0; row < matrix.length; row++) {for (let col = 0; col < matrix[0].length; col++) {if(matrix[row][col] == '1' ) heights[col] += 1;else heights[col] = 0;}//求出每一层的 heights[] 然后传给84题的函数res = Math.max(res, largestRectangleArea(heights));//更新一下最大矩形面积}return res;
};const largestRectangleArea = (heights) => {let maxArea = 0const stack = [] //单调递增栈 注意栈存的时下标heights = [0, ...heights, 0]    //在heights数组前后增加两个哨兵 用来清零单调递增栈里的元素   for (let i = 0; i < heights.length; i++) { //当前元素对应的高度小于栈顶元素对应的高度时while (heights[i] < heights[stack[stack.length - 1]]) { const stackTopIndex = stack.pop() //出栈maxArea = Math.max(               //计算面积 并更新最大面积maxArea,                        heights[stackTopIndex] * (i - stack[stack.length - 1] - 1)//高乘宽)}stack.push(i)//当前下标加入栈}return maxArea
}

496. 下一个更大元素 I (easy)

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。

给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。

示例 1:

输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:

  • 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
  • 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
  • 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
    示例 2:

输入:nums1 = [2,4], nums2 = [1,2,3,4].
输出:[3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:

  • 2 ,用加粗斜体标识,nums2 = [1,2,3,4]。下一个更大元素是 3 。
  • 4 ,用加粗斜体标识,nums2 = [1,2,3,4]。不存在下一个更大元素,所以答案是 -1 。

提示:

1 <= nums1.length <= nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 104
nums1和nums2中所有整数 互不相同
nums1 中的所有整数同样出现在 nums2 中

进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?

动画过大,点击查看

  • 思路:
    1. 循环nums2,如果循环的元素大于栈顶元素,并且栈不为空,则不断将栈顶元素作为key,当前元素作为value加入map中
    2. 本质是第一个比栈顶元素大的值会让栈中的元素不断出队 所以这个数就是这些出栈元素的下一个更大的数
    3. 剩下来的元素就是没有找到最大值的
    4. 遍历nums1将结果推入ans中
  • 复杂度:时间复杂度O(m+n),nums1、nums2遍历一遍,nums2中的元素入队出队一次。空间复杂度O(n),栈空间和map的空间的复杂度

js:

let nextGreaterElement = function(nums1, nums2) {let map = new Map(), stack = [], ans = [];//循环nums2,如果循环的元素大于栈顶元素,并且栈不为空,则不断将栈顶元素作为key,当前元素作为value加入map中//本质是第一个比栈顶元素大的值会让栈中的元素不断出队 所以这个数就是这些出栈元素的下一个更大的数nums2.forEach(item => {while(stack.length && item > stack[stack.length-1]){map.set(stack.pop(), item)};stack.push(item);});stack.forEach(item => map.set(item, -1));//剩下来的元素就是没有找到最大值的nums1.forEach(item => ans.push(map.get(item)));//遍历nums1将结果推入ans中return ans;
};

42. 接雨水 (hard)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105

  • 思路:首先考虑暴力做法,找找思路,暴力做法可以遍历数组,在每个位置分别往两边寻找左柱子中的最大高度和右柱子中的最大高度,找到之后,用左右最大高度的较小者减去当前柱子的高度,就是当前位置能接的水量。该方法要循环整个数组,并且每个位置要遍历数组寻找左右柱子高度的最大值,嵌套了一层循环,所以复杂度是O(n^2)

    我们怎样加速嵌套的这层循环呢,其实可以预先计算从左往右和从右往左的最大高度数组,在循环数组的时候,可以直接拿到该位置左右两边的最大高度,当前位置的接水量就是左右两边高度的较小者减去当前位置柱子的高度

  • 复杂度:时间复杂度O(n),寻找左右的最大高度,循环计算每个位置的接水量,总共3个循环,但他们不是嵌套关系。空间复杂度是O(n),n是heights数组,用到了leftMaxrightMax数组,即存放左右两边最大高度的数组。

方法1.动态规划

动画过大,点击查看

js:

var trap = function(height) {const n = height.length;if (n == 0) {//极端情况return 0;}const leftMax = new Array(n).fill(0);//初始化从左往右看的最大值数组leftMax[0] = height[0];for (let i = 1; i < n; ++i) {leftMax[i] = Math.max(leftMax[i - 1], height[i]);}const rightMax = new Array(n).fill(0);//初始化从右往左看的最大值数组rightMax[n - 1] = height[n - 1];for (let i = n - 2; i >= 0; --i) {rightMax[i] = Math.max(rightMax[i + 1], height[i]);}let ans = 0;//循环数组,每个位置能接的雨水量就是这个位置左右最大值的较小者减去当前的高度for (let i = 0; i < n; ++i) {ans += Math.min(leftMax[i], rightMax[i]) - height[i];}return ans;
};
方法2:单调栈

动画过大,点击查看

  • 思路:遍历heights数组,将其中的元素加入单调递减栈,如果当前柱子的高度大于栈顶柱子的高度, 不断出栈,相当于找到左边比当前柱子矮的位置,然后每次出栈之后都要累加一下面积。
  • 复杂度:时间复杂度O(n),n是heights的长度,数组中的每个元素最多入栈出栈一次。空间复杂度O(n),栈的空间,最多不会超过heights的长度

js:

var trap = function(height) {let ans = 0;const stack = [];//单调递减栈。存放的是下标哦const n = height.length;for (let i = 0; i < n; ++i) {//循环heights//当前柱子的高度大于栈顶柱子的 不断出栈while (stack.length && height[i] > height[stack[stack.length - 1]]) {const top = stack.pop();if (!stack.length) {//栈为空时 跳出循环break;}const left = stack[stack.length - 1];//拿到当前位置左边比当前柱子矮的位置const currWidth = i - left - 1;//计算宽度const currHeight = Math.min(height[left], height[i]) - height[top];//计算高度ans += currWidth * currHeight;//计算当面积}stack.push(i);//加入栈}return ans;
};
方法3.双指针

动画过大,点击查看

  • 思路:如果右边存在一个比当前高的柱子,就会形成一个洼地,同理,左边存在一个比当前高柱子,也会形成一个坑,用双指针循环heights数组,判断是否形成洼地,如果能形成洼地,则计算积水量,累加进ans。
  • 复杂度:时间复杂度O(n),n为heights的长度, 总共遍历heights一次。空间复杂度O(1),只用到了两个指针

js:

var trap = function(height) {let ans = 0;let left = 0, right = height.length - 1;//初始化双指针let leftMax = 0, rightMax = 0;//左右两边最大高度while (left < right) {//循环双指针leftMax = Math.max(leftMax, height[left]);//左边最大值rightMax = Math.max(rightMax, height[right]);//右边最大值if (height[left] < height[right]) {//右边的柱子高于左边的柱子 计算这个位置的接水量 累加进结果ans += leftMax - height[left];++left;} else {    //左边的柱子高于或等于右边的柱子 计算这个位置的接水量 累加进结果ans += rightMax - height[right];--right;}}return ans;
};

视频讲解:传送门

相关文章:

用javascript分类刷leetcode13.单调栈(图文视频讲解)

239. 滑动窗口最大值 (hard) 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,…...

英语基础语法学习(B站英语电力公司)

1. 句子结构 五大基本句型&#xff1a; 主谓主谓宾主谓宾宾主谓宾宾补主系表 谓语&#xff1a; 一般来说&#xff0c;谓语是指主语发出的动作。&#xff08;动词&#xff09;但是很多句子是没有动作的&#xff0c;但是还是必须要有谓语。&#xff08;此时需要be动词&#x…...

【计算机网络】网络层IP协议

文章目录一、认识IP协议二、IP协议头部格式三、IP地址划分1. IP地址分类2. 子网划分四、IP地址数量危机1. IP地址的数量限制2. NAT技术五、私网IP和公网IP六、路由1. 认识路由2. 路由表生成算法一、认识IP协议 IP协议是Internet Protocol&#xff08;互联网协议&#xff09;的…...

Eclipse快捷键大全

编辑类快捷键Ctrl1: 快速修复(最经典的快捷键, 可以解决很多问题, 比如import类、try catch包围等)CtrlShiftF: 格式化当前代码CtrlShiftM: 添加类的import导入CtrlShiftO: 组织类的导入(既有CtrlShiftM的作用,又可以去除没用的导入, 一般用这个导入包)CtrlY: 重做(与CtrlZ相反…...

JavaScript 高级2 :构造函数和原型 d331702016e84f54b3594ae05e0eeac

JavaScript 高级2 &#xff1a;构造函数和原型 Date: January 16, 2023 Text: 构造函数和原型、继承、ES5中的新增方法 目标 能够使用构造函数创建对象 能够说出原型的作用 能够说出访问对象成员的规则 能够使用 ES5新增的一些方法 构造函数和原型 概述 在典型的 OOP 的…...

maven-war-plugin插件 overlays maven-war-plugin翻译

说明 翻译maven-war-plugin插件的部分内容 官方地址为&#xff1a;https://maven.apache.org/plugins/maven-war-plugin/index.html Overview 概述 Introduction 介绍 Apache Maven WAR Plugin apache maven war 插件 The WAR Plugin is responsible for collecting all artifa…...

【数据结构】初识二叉树(二叉树的入门知识)

初识二叉树一、树概念及结构1、树的概念2、树的相关概念3、树的表示4、树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09;二、二叉树概念及结构1、概念2、特殊的二叉树3、二叉树的性质4、二叉树的存储结构三、结语一、树概念及结构 1、树的概念 树是一种非线…...

RV1126笔记三十二:基于 FastDeploy 在 RV1126 上的部署示例(RV1126 上部署 YOLOv5 检测模型测试)

若该文为原创文章,转载请注明原文出处。 FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具, 支持云边端部署。提供超过 🔥160+ Text,Vision, Speech和跨模态模型📦开箱即用的部署体验,并实现🔚端到端的推理性能优化。包括 物体检测、字符识别(OCR)、…...

JVM垃圾回收——G1垃圾收集器

目录 一、什么是G1垃圾收集器 二、G1垃圾收集器的内存划分 三、G1垃圾收集器的收集过程 四、G1收集器的优缺点 五、G1收集器的JVM参数配置 一、什么是G1垃圾收集器 Garbage First(简称G1)收集器是垃圾收集器技术发展史上里程碑式的成果&#xff0c;它摒弃了传统垃圾收集器的…...

C语言深度剖析:关键字

C语言深度剖析:关键字C语言深度剖析:关键字前言定义与声明&#xff08;补充内容&#xff09;最宏大的关键字-auto最快的关键字-register关键字static被冤枉的关键字-sizeof整型在内存中的存储原码、反码、补码大小端补充理解变量内容的存储和取出为什么都是补码整型取值范围关于…...

聊一聊过度设计!

文章目录什么是过度设计&#xff1f;过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见总结新手程序员在做设计时&#xff0c;因为缺乏经验&#xff0c;很容易写出欠设计的代码&#xff0c;但有一些经验的程序员&#xff0c;尤其是在刚学习过设…...

程序员在小公司(没有大牛,人少)怎么成长?

大多数小公司都是创业公司&#xff0c;所以它们有着非常独特的“创业心态”。所谓创业心态通常表现为关注快速增长&#xff0c;竭尽所能让公司盈利&#xff0c;或者达成其他一些迫切目标。 在这样一家公司工作的软件开发人员&#xff0c;你极有可能要身兼多职&#xff0c;不能…...

【Fastdfs实战】在本地如何将文件上传到Linux虚拟机

作者&#xff1a;狮子也疯狂 专栏&#xff1a;《Fastdfs连续剧》 坚持做好每一步&#xff0c;幸运之神自然会驾凌在你的身上 目录一. &#x1f981; 前言二. &#x1f981; 上传原理Ⅰ. &#x1f407; 原理图解Ⅱ. &#x1f407; 传输原理三. &#x1f981; 实战演示Ⅰ. &…...

ERP 系统的应用对企业财务会计信息系统内部控制的影响

(一)对企业的财务信息数据进行实时和动态管理传统的财务会计信息系统一般都是采用单一的软件系统&#xff0c;所以在信息的传递及处理上常常不能满足企业的需要&#xff0c;信息与其他部门存在不对称及滞后的现象。而ERP 系统是通过有效的技术手段将企业的各种分散的数据进行完…...

智慧物联网源码带手机端源码 物联网系统源码

在智慧工厂领域&#xff0c;智慧城市领域&#xff0c;都需要对设备进行监控。比如工厂需要对周围环境温度、湿度、气压、电压&#xff0c;灯的开关进行监控。这时候就需要物联网平台来进行管理。 推荐一个基于java开发的物联网平台&#xff0c;前端HTML带云组态、可接入视频监…...

AI绘画进军三次元,有人用它打造赛博女友?(diffusion)

目录0 写在前面1 AI绘画技术飞跃2 效果展示3 环境配置3.1 下载基础模型3.2 更新.NET和模型3.3 下载绘画模型3.4 启动项目3.5 标签配置4 结语0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&a…...

计算机网络高频知识点

目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…...

谈谈前端性能优化-面试版

前言 当我们去面试的时候&#xff0c;很大概率会被面试官问这么一个问题&#xff1a;你有尝试过对项目做性能优化吗&#xff1f;或者你了解哪些性能优化的方法&#xff1f;听到这个问题的你可能是这样的&#xff1a; 似曾相识但又说不清楚&#xff0c;往往只能零散地说出那么几…...

JAVA连接数据库——JDBC的简单使用

JDBC即Java数据库连接.用来实现Java程序对数据库增删查改。 为了对接Java程序和数据库&#xff0c;java.sql提供了很多api包含在java.sql和javax.sql里面 结构: DriverManager接口: 每一个数据库的驱动程序都必须去到DriverManager注册&#xff0c;生成一个Connection Conn…...

Pandas数据查询

Pandas数据查询 Pandas查询数据的几种方法 df.loc方法&#xff0c;根据行、列的标签值查询 df.iloc方法&#xff0c;根据行、列的数字位置查询 df.where方法 df.query方法 .loc既能查询&#xff0c;又能覆盖写入&#xff0c;强烈推荐&#xff01; Pandas使用df.loc查询数据…...

NLP-统计词频之处理停用词

前言 本文是该专栏的第1篇,后面会持续分享NLP的各种干货知识,值得关注。 一般来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或者应用服务。 举个例子,如Facebook News Feed这种社交网站推送,它的算法知道你的兴趣是自然语言处理,就会推送相关的广告或者…...

sort 定制排序规则(配合functools.cmp_to_key())

sort 定制排序规则&#xff08;配合functools.cmp_to_key()&#xff09; 配合例题学习 题目链接&#xff1a;179. 最大数 题目大意&#xff1a;给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&a…...

【华为OD机试模拟题】用 C++ 实现 - 内存池(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明内存池题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:…...

Python--深入浅出的装饰器--1

本章一起深入浅出一下装饰器。前面我们讲过一章装饰器了。不知道各位看懂了多少。每太看懂也没关系&#xff0c;本章就一起实操一下。简单的例子例1例2上述的两个例子&#xff0c;执行结果为&#xff1a;1423.为什么呢&#xff1f;&#xff1f;&#xff1f;解析语法糖&#xff…...

如何从0创建Spring Cloud Alibaba(多模块)

以一个父工程带两个Module&#xff08;test1、test2&#xff09;为例。 一、创建父工程 由于是模块化项目&#xff0c;那么父工程不需要实际的代码逻辑&#xff0c;因此无需创建src&#xff0c;那么可以有几种方式创建&#xff0c;例如&#xff1a; 使用Spring Initializr脚…...

【华为OD机试模拟题】用 C++ 实现 - 某公司组织招聘(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明招聘 | 某公司组织题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明...

Spring Cloud Sentinel实战(一)- Sentinel介绍

Sentinel介绍 什么是Sentinel 分布式系统的流量防卫兵&#xff1a;随着微服务的普及&#xff0c;服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点&#xff0c;在流量控制、断路、负载保护等多个领域开展工作&#xff0c;保障服务可靠性。 特点&#xff1a; 1. 2…...

基于SpringBoot的任务管理三种方式

文章目录前言一&#xff0c;异步任务1.1 无返回值异步任务调用1.2 有返回值异步任务调用二、定时任务2.1 背景介绍2.2 todo三、邮箱任务3.1 todo前言 开发 web 应用时&#xff0c;多数应用都具备任务调度功能&#xff0c;常见的任务包括异步任务、定时任务和邮件任务。我们以数…...

【华为OD机试模拟题】用 C++ 实现 - 查找单入口空闲区域(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明查找单入口空闲区域题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明示例...

普乐蛙部队vr训练设备军事训练vr体验馆设备元宇宙VR

案例一 地址&#xff1a;北京某部队 内置设备&#xff1a;乐享光轮、VR单车、暗黑战场、VR影院、游艺设备等 内容&#xff1a;部队增加VR体验设备&#xff0c;一、可以在强训练后&#xff0c;进行放松娱乐&#xff0c;也可以锻炼&#xff1b;二、VR设备可以模拟训练场景来进…...

wordpress datediff/游戏搜索风云榜

2019独角兽企业重金招聘Python工程师标准>>> 在日常性能测试或者生产运维工作中为了保证业务的准确性和及时性等各项业务与技术指标能满足日常操作与稳定运行&#xff0c;一般在工作工作会使用一些简易命令工具协助排查问题&#xff0c;例如排查CPU、内存、磁盘IO、…...

信阳专业做网站公司/怎么做百度关键词排名

一、赛题解读 1、赛题分析 赛题任务需要对添加了水印的图像&#xff0c;将水印擦除掉&#xff0c;还原原本的图的样子(图1)。 与手写文字擦除任务(图2)一个比较大的区别是&#xff1a;水印占据面积很大&#xff0c;因此对水印擦除后&#xff0c;还需要对被擦除的区域进行一个填…...

网站怎么做微信扫描登录网站/whois查询 站长工具

一、修改Flex builder 1.用无格式编辑器打开FlashBuilder.ini 2.把zh_CN替换成"en_US" 二、修改MyEclipse插件 1.用无格式编辑器打开MyEclipse8.5\configuration\config.ini 2.最后添加osgi.nlen_US 三、修改Eclipse插件 1.用无格式编辑器打开eclipse.ini 2.顶部加入…...

行业网站建设公司/怎样看网页的友情链接

我们逛街&#xff0c;经常会看到店铺关门或转让&#xff0c;是什么原因搞得我们实体经济前景一片暗淡呢&#xff1f;我们简单分析下&#xff1a; 1、消费模式的改变&#xff1a;随着互联网的快速发展和普及&#xff0c;以及电子商务的发展&#xff0c;人们的生活观念也逐渐受到…...

国外网站平台/新闻发稿推广

最近常听同事提及相关性分析,正巧看到这个google的开源库&#xff0c;并把相关操作与调试结果记录下来。 小说集可以百度《金庸小说全集 14部》全&#xff08;TXT&#xff09;作者&#xff1a;金庸 下载下来。 需要整理好格式&#xff0c;门派和武功名称之间需要有换行符&#…...

手机微信可以做网站吗/网络营销策划方案ppt模板

django-check-seo为 Django CMS 用户替换 Yoast 或 SEMrush 的部分功能。换句话说&#xff0c;django-check-seo 会告诉你你的网站 SEO 是否存在问题。同时&#xff0c;这些建议对很多搜索引擎都有效。安装如果你的网站是基于 django-cms 的&#xff0c;并且 Python 和 Django …...