代码随想录-Day53
739. 每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:
输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:
输入: temperatures = [30,60,90]
输出: [1,1,0]
方法一:
class Solution {// 版本 1public int[] dailyTemperatures(int[] temperatures) {int lens=temperatures.length;int []res=new int[lens];/**如果当前遍历的元素 大于栈顶元素,表示 栈顶元素的 右边的最大的元素就是 当前遍历的元素,所以弹出 栈顶元素,并记录如果栈不空的话,还要考虑新的栈顶与当前元素的大小关系否则的话,可以直接入栈。注意,单调栈里 加入的元素是 下标。*/Deque<Integer> stack=new LinkedList<>();stack.push(0);for(int i=1;i<lens;i++){if(temperatures[i]<=temperatures[stack.peek()]){stack.push(i);}else{while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){res[stack.peek()]=i-stack.peek();stack.pop();}stack.push(i);}}return res;}
这段代码是用于解决「每日温度」问题的Java实现,这个问题的目标是给定一个整数数组 temperatures
,其中每个元素表示每天的温度,返回一个新的数组,其中每个元素表示直到未来几天才会出现更高的温度的天数。如果不存在未来几天会出现更高的温度,那么该位置的值为0。
代码解析
-
初始化:
- 创建一个与
temperatures
长度相同的数组res
,用于存放结果。 - 使用一个单调栈
stack
,数据结构为Deque
,在Java中通常使用LinkedList
实现,用于存储下标。
- 创建一个与
-
遍历并维护单调栈:
- 遍历
temperatures
数组中的每个元素。 - 对于当前遍历到的元素
temperatures[i]
:- 如果该元素小于等于栈顶元素对应的温度,即
temperatures[i] <= temperatures[stack.peek()]
,则将当前下标i
入栈。 - 否则,进入一个while循环:
- 当栈不为空且当前元素大于栈顶元素对应的温度时,弹出栈顶元素,并计算栈顶元素下标到当前下标
i
的距离,即i - stack.peek()
,并将这个距离存入结果数组res
的对应位置。 - 继续循环,直到栈为空或当前元素不大于栈顶元素对应的温度。
- 当栈不为空且当前元素大于栈顶元素对应的温度时,弹出栈顶元素,并计算栈顶元素下标到当前下标
- 最后,将当前下标
i
入栈。
- 如果该元素小于等于栈顶元素对应的温度,即
- 遍历
-
返回结果:
- 返回结果数组
res
,其中每个元素表示直到未来几天才会出现更高的温度的天数。
- 返回结果数组
时间复杂度和空间复杂度
- 时间复杂度: O(n),其中 n 是数组
temperatures
的长度。每个元素至多被放入和弹出栈一次。 - 空间复杂度: O(n),需要一个大小为
n
的结果数组res
和一个单调栈stack
。
总结
这段代码通过使用单调栈的策略,有效地解决了每日温度问题,能够快速找到每个温度元素右边第一个比它大的温度元素的位置。单调栈是一种常用的数据结构,在处理与单调性相关的数组或序列问题时非常有用,例如寻找最近的更大或更小的元素、股票价格波动分析等。在实际应用中,掌握单调栈的原理和使用方法能够帮助解决一系列经典问题,提高代码效率。
方法二:
//--------这 是一条分界线// 版本 2class Solution {public int[] dailyTemperatures(int[] temperatures) {int lens=temperatures.length;int []res=new int[lens];Deque<Integer> stack=new LinkedList<>();for(int i=0;i<lens;i++){while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){res[stack.peek()]=i-stack.peek();stack.pop();}stack.push(i);}return res;}
这段代码同样是用于解决「每日温度」问题的Java实现,其目标与前一版本相同,即给定一个整数数组 temperatures
,返回一个新的数组,其中每个元素表示直到未来几天才会出现更高的温度的天数。如果不存在未来几天会出现更高的温度,那么该位置的值为0。
代码解析
-
初始化:
- 创建一个与
temperatures
长度相同的数组res
,用于存放结果。 - 使用一个单调栈
stack
,数据结构为Deque
,在Java中通常使用LinkedList
实现,用于存储下标。
- 创建一个与
-
遍历并维护单调栈:
- 遍历
temperatures
数组中的每个元素。 - 对于当前遍历到的元素
temperatures[i]
:- 进入一个while循环,只要栈不为空且当前元素大于栈顶元素对应的温度,执行以下操作:
- 计算栈顶元素下标到当前下标
i
的距离,即i - stack.peek()
,并将这个距离存入结果数组res
的对应位置。 - 弹出栈顶元素。
- 计算栈顶元素下标到当前下标
- 将当前下标
i
入栈。
- 进入一个while循环,只要栈不为空且当前元素大于栈顶元素对应的温度,执行以下操作:
- 遍历
-
返回结果:
- 返回结果数组
res
,其中每个元素表示直到未来几天才会出现更高的温度的天数。
- 返回结果数组
时间复杂度和空间复杂度
- 时间复杂度: O(n),其中 n 是数组
temperatures
的长度。每个元素至多被放入和弹出栈一次。 - 空间复杂度: O(n),需要一个大小为
n
的结果数组res
和一个单调栈stack
。
版本对比
相比于版本1,版本2的代码在遍历过程中直接从头开始,简化了代码逻辑,将入栈操作放在了while循环的外部。这种写法同样有效,且逻辑上更清晰,因为它避免了不必要的条件判断(如版本1中的 temperatures[i] <= temperatures[stack.peek()]
)。每次遍历到新元素时,代码首先处理栈中所有比当前元素小的元素,然后将当前元素入栈,这一过程确保了栈内的元素始终按温度递减的顺序排列,即形成了一个单调递减栈。
总结
通过使用单调栈的策略,版本2的代码同样有效地解决了每日温度问题。这种实现方式不仅保持了良好的时间复杂度和空间复杂度,而且在代码结构上更为精简和直观,有助于提高代码的可读性和维护性。单调栈在处理与单调性相关的数组或序列问题时是一种非常有用的工具,熟练掌握其使用方法对于解决一系列经典问题具有重要意义。
496. 下一个更大元素 I
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 。
方法一:
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> temp = new Stack<>();int[] res = new int[nums1.length];Arrays.fill(res,-1);HashMap<Integer, Integer> hashMap = new HashMap<>();for (int i = 0 ; i< nums1.length ; i++){hashMap.put(nums1[i],i);}temp.add(0);for (int i = 1; i < nums2.length; i++) {if (nums2[i] <= nums2[temp.peek()]) {temp.add(i);} else {while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) {if (hashMap.containsKey(nums2[temp.peek()])){Integer index = hashMap.get(nums2[temp.peek()]);res[index] = nums2[i];}temp.pop();}temp.add(i);}}return res;}
}
这段代码是用于解决「下一个更大元素 I」问题的Java实现。给定两个没有重复元素的数组 nums1
和 nums2
,其中 nums1
是 nums2
的一个子集,目标是对于 nums1
中的每一个元素,找到在 nums2
中下一个更大的元素的值。如果没有这样的元素,那么输出 -1。
代码解析
-
初始化:
- 创建一个单调栈
temp
,数据结构为Stack
,用于存储nums2
中元素的下标。 - 创建一个结果数组
res
,初始化所有元素为-1
,长度与nums1
相同。 - 创建一个哈希映射
hashMap
,用于存储nums1
中元素及其在res
数组中的下标,以便快速查找和更新结果。
- 创建一个单调栈
-
遍历并维护单调栈:
- 遍历
nums2
数组中的每个元素。 - 对于当前遍历到的元素
nums2[i]
:- 如果该元素小于等于栈顶元素对应的值,即
nums2[i] <= nums2[temp.peek()]
,则将当前下标i
入栈。 - 否则,进入一个while循环:
- 当栈不为空且当前元素大于栈顶元素对应的值时,检查栈顶元素是否在
nums1
中,如果是,则获取该元素在res
中的下标,并将当前元素的值赋给res
的对应位置。 - 继续循环,直到栈为空或当前元素不大于栈顶元素对应的值。
- 当栈不为空且当前元素大于栈顶元素对应的值时,检查栈顶元素是否在
- 最后,将当前下标
i
入栈。
- 如果该元素小于等于栈顶元素对应的值,即
- 遍历
-
返回结果:
- 返回结果数组
res
,其中每个元素表示nums1
中对应元素在nums2
中的下一个更大元素的值,若不存在则为-1
。
- 返回结果数组
时间复杂度和空间复杂度
- 时间复杂度: O(m + n),其中 m 和 n 分别是数组
nums1
和nums2
的长度。每个元素至多被放入和弹出栈一次,哈希表的查找操作平均时间复杂度为 O(1)。 - 空间复杂度: O(n),需要一个大小为
n
的单调栈temp
和一个哈希映射hashMap
,以及一个结果数组res
。
总结
这段代码通过使用单调栈和哈希映射的策略,有效地解决了下一个更大元素问题,能够快速找到 nums1
中每个元素在 nums2
中下一个更大元素的值。单调栈是一种常用的数据结构,在处理与单调性相关的数组或序列问题时非常有用,结合哈希映射能够进一步提高查找效率。在实际应用中,掌握这些数据结构和算法原理能够帮助解决一系列经典问题,提高代码效率和性能。
方法二:
// 版本2
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++) {map.put(nums1[i], i);}int[] res = new int[nums1.length];Stack<Integer> stack = new Stack<>();Arrays.fill(res, -1);for (int i = 0; i < nums2.length; i++) {while (!stack.isEmpty() && nums2[stack.peek()] < nums2[i]) {int pre = nums2[stack.pop()];if (map.containsKey(pre)) {res[map.get(pre)] = nums2[i];}}stack.push(i);}return res;}
}
这段代码是用于解决「下一个更大元素 I」问题的另一种Java实现,其实现思路与之前解析的版本相似,但代码结构和变量命名有所不同,旨在解决给定两个没有重复元素的数组 nums1
和 nums2
,其中 nums1
是 nums2
的一个子集,对于 nums1
中的每一个元素,找到在 nums2
中下一个更大的元素的值。如果没有这样的元素,那么输出 -1。
代码解析
-
初始化:
- 创建一个哈希映射
map
,用于存储nums1
中元素及其在nums1
中的下标,以便快速查找和更新结果。 - 创建一个结果数组
res
,初始化所有元素为-1
,长度与nums1
相同。 - 创建一个单调栈
stack
,数据结构为Stack
,用于存储nums2
中元素的下标。
- 创建一个哈希映射
-
构建哈希映射:
- 遍历
nums1
数组,将每个元素及其在nums1
中的下标存储在map
中。
- 遍历
-
遍历并维护单调栈:
- 遍历
nums2
数组中的每个元素。 - 对于当前遍历到的元素
nums2[i]
:- 如果栈不为空并且栈顶元素对应的值小于当前元素,即
nums2[stack.peek()] < nums2[i]
,则:- 弹出栈顶元素,并获取其值。
- 如果弹出的元素在
nums1
中,即map
中存在该元素,那么在res
数组的对应位置填入当前元素的值。
- 继续这个过程,直到栈为空或者栈顶元素对应的值不再小于当前元素。
- 最后,将当前下标
i
入栈。
- 如果栈不为空并且栈顶元素对应的值小于当前元素,即
- 遍历
-
返回结果:
- 返回结果数组
res
,其中每个元素表示nums1
中对应元素在nums2
中的下一个更大元素的值,若不存在则为-1
。
- 返回结果数组
时间复杂度和空间复杂度
- 时间复杂度: O(m + n),其中 m 和 n 分别是数组
nums1
和nums2
的长度。每个元素至多被放入和弹出栈一次,哈希表的查找操作平均时间复杂度为 O(1)。 - 空间复杂度: O(n),需要一个大小为
n
的单调栈stack
和一个哈希映射map
,以及一个结果数组res
。
总结
这段代码同样通过使用单调栈和哈希映射的策略,有效地解决了下一个更大元素问题,能够快速找到 nums1
中每个元素在 nums2
中下一个更大元素的值。代码结构清晰,逻辑直观,是解决这类问题的一种典型且高效的方法。掌握这些数据结构和算法原理能够帮助解决一系列经典问题,提高代码效率和性能。在实际应用中,根据具体需求和场景选择合适的数据结构和算法是非常重要的。
503. 下一个更大元素 II
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。
数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。
示例 1:
输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
示例 2:
输入: nums = [1,2,3,4,3]
输出: [2,3,4,-1,4]
class Solution {public int[] nextGreaterElements(int[] nums) {//边界判断if(nums == null || nums.length <= 1) {return new int[]{-1};}int size = nums.length;int[] result = new int[size];//存放结果Arrays.fill(result,-1);//默认全部初始化为-1Stack<Integer> st= new Stack<>();//栈中存放的是nums中的元素下标for(int i = 0; i < 2*size; i++) {while(!st.empty() && nums[i % size] > nums[st.peek()]) {result[st.peek()] = nums[i % size];//更新resultst.pop();//弹出栈顶}st.push(i % size);}return result;}
}
这段代码是用于解决「下一个更大元素 II」问题的Java实现。给定一个循环数组 nums
(数组中元素的下一个元素是数组的第一个元素),目标是返回一个数组,其中每个元素是原数组中下一个更大元素的值,如果没有更大的元素,则对应位置的值为 -1。
代码解析
-
初始化:
- 创建一个单调栈
st
,数据结构为Stack
,用于存储nums
中元素的下标。 - 创建一个结果数组
result
,初始化所有元素为-1
,长度与nums
相同。
- 创建一个单调栈
-
遍历并维护单调栈:
- 遍历
nums
数组两次,即遍历2 * nums
的长度(考虑到循环数组的性质),使用模运算i % size
来获取实际数组下标。 - 对于当前遍历到的元素
nums[i % size]
:- 如果栈不为空并且栈顶元素对应的值小于当前元素,即
nums[st.peek()] < nums[i % size]
,则:- 更新
result
数组中对应位置的值为当前元素的值。 - 弹出栈顶元素。
- 更新
- 继续这个过程,直到栈为空或者栈顶元素对应的值不再小于当前元素。
- 最后,将当前下标
i % size
入栈。
- 如果栈不为空并且栈顶元素对应的值小于当前元素,即
- 遍历
-
返回结果:
- 返回结果数组
result
,其中每个元素表示原数组nums
中对应元素的下一个更大元素的值,若不存在则为-1
。
- 返回结果数组
时间复杂度和空间复杂度
- 时间复杂度: O(n),其中 n 是数组
nums
的长度。虽然代码中遍历了2 * nums
的长度,但是每个元素至多被放入和弹出栈一次,因此总的时间复杂度为 O(n)。 - 空间复杂度: O(n),需要一个大小为
n
的单调栈st
和一个结果数组result
。
总结
这段代码通过使用单调栈的策略,有效地解决了下一个更大元素 II 问题,能够处理循环数组并找到每个元素的下一个更大元素的值。代码逻辑清晰,通过两次遍历数组并使用模运算处理循环数组的特点,实现了高效的解题策略。单调栈在处理这类问题时表现出了强大的能力,能够快速找到特定条件下下一个更大的元素,是解决此类问题的经典方法。在实际应用中,了解和掌握单调栈的使用方法对于解决与单调性相关的数组或序列问题具有重要意义。
相关文章:

代码随想录-Day53
739. 每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: …...

Android 如何通过代码实时设置EditTextView光标
背景:换肤框架下,QA进行深色浅色切换说输入框光标颜色没有改变,转UI结果UI说需要修改!!!!! 本来有方法可以设置,但是 设置后未生效。重新进入该页面才生效!&a…...

202488读书笔记|《365日创意文案》——无聊的 到底是这世间, 还是自己?懂得忘却的人才能前进
202488读书笔记|《365日创意文案》——无聊的 到底是这世间, 还是自己?懂得忘却的人才能前进 1月2月3月4月5月6月7月8月9月10月11月12月 《365日创意文案》WRITES PUBLISHING,一些日常,是烟火,也是幸福的印记。 当下也…...

iperf3: error - unable to connect to server: No route to host
1.确认iperf3版本是否统一。 2.确认防火墙是否关闭。 关闭防火墙 : systemctl stop firewalld 查看防火墙状态: systemctl status firewalld 3.重新建起链接...

正则表达式中的贪心匹配
在正则表达式中,?既可以表示数量,0次或1次,等效于 {0,1},也可以跟在其它数量限定符之后,表示非贪心匹配,即匹配时匹配搜索到的尽可能短的字符串。 下面来看一个例子: T…...

线程相关概念及操作
【1】线程的概念 1.线程-->进程会得到一个内存地址,进程是资源分配的基本单位线程才是真正进程里处理数据与逻辑的东西进程---》被分配一定的资源线程---》利用进程资源处理数据与逻辑 【2】进程和线程关系: 进程与进程之间是竞争关系,竞…...

2024最新版若依-RuoYi-Vue3-PostgreSQL前后端分离项目部署手册教程
项目简介: RuoYi-Vue3-PostgreSQL 是一个基于 RuoYi-Vue3 框架并集成 PostgreSQL 数据库的项目。该项目提供了一套高效的前后端分离的开发解决方案,适用于中小型企业快速构建现代化的企业级应用。此项目结合了 RuoYi-Vue-Postgresql 和 RuoYi-Vue3 的优点࿰…...

PHP源码:新闻门户系统(附管理后台+前台)
一. 前言 今天小编给大家带来了一款可学习,可商用的,新闻门户系统 源码,支持二开,无加密。项目可以扩展为个人博客,和一些社交论坛网址。主要功能:支持文章管理,评论管理,分类管理等…...

15kg级弹簧刀高速巡飞无人机技术详解
弹簧刀高速巡飞无人机,作为一种先进的战术导弹系统,融合了无人机与导弹的双重特性,成为了现代战争中不可或缺的侦察与打击利器。该无人机以其小巧的外形设计、优异的性能表现和广泛的适用领域,受到了全球军事领域的广泛关注。弹簧…...

中国东方资产管理25届秋招北森测评笔试如何高分通过?真题考点分析看完这篇就够了
一、东方资管校招测评题型分析 中国东方资产管理股份有限公司(中国东方资管)的校园招聘测评题型主要包括以下几个部分: 1. **计分题,行测知识**:这部分题量大约在56-57题左右,分为不同的模块进行计时测试。…...

简写单词BC149
BC149 简写单词 题目描述输入描述:输出描述: 题目描述 规定一种对于复合词的简写方式为只保留每个组成单词的首字母,并将首字母大写后再连接在一起 比如 “College English Test”可以简写成“CET”,“Computer Science”可以简写…...

Chapter11让画面动起来——Shader入门精要学习笔记
Chapter11让画面动起来 一、Unity Shader中的内置变量(时间篇)二、纹理动画1.序列帧动画2.滚动背景 三、顶点动画1.流动的河流2.广告牌3.注意事项①批处理问题②阴影投射问题 一、Unity Shader中的内置变量(时间篇) Unity Shader…...

c++之命名空间详解(namespace)
引例 在学习之前我们首先了来看这样一个情形: 在c语言下,我们写了两个头文件:链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型(比如将int改成char),来做到整体代换。 但是我们两个头文件里面…...

【大模型】在大语言模型的璀璨星河中寻找道德的北极星
在大语言模型的璀璨星河中寻找道德的北极星 引言一、概念界定二、隐私保护的挑战2.1 数据来源的道德考量2.2 敏感信息的泄露风险 三、偏见与歧视的隐忧3.1 训练数据的偏见传递3.2 内容生成的不公倾向 四、责任归属的模糊地带4.1 生成内容的责任界定4.2 自动化决策的伦理考量 五…...

嵌入式Linux之Uboot简介和移植
uboot简介 uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说,可以在没有系统的情况…...

算法整理——【贪心算法练习(1)】
上一篇博客算法整理——【贪心算法简述】-CSDN博客,我们介绍了贪心算法的基础知识,现在我们要对此进行进一步练习。 一、跳跃游戏II 例题为45. 跳跃游戏 II - 力扣(LeetCode),给定一个长度为 n 的 0 索引整数数组 nu…...

人脸识别课堂签到系统【PyQt5实现】
人脸识别签到系统 1、运用场景 课堂签到,上班打卡,进出门身份验证。 2、功能类别 人脸录入,打卡签到,声音提醒,打卡信息导出,打包成exe可执行文件 3、技术栈 python3.8,sqlite3,opencv,face_recognition,PyQt5,csv 4、流程图 1、导入库 2、编写UI界面 3、打…...

Linux dig命令常见用法
Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具,通过此命令,你可以实现域名查询和域名问题的定位,对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说,它是一个非…...

数学建模论文写作文档word
目录 1. 摘要写法1.1 确定题目与方法1.2 编写开头段落1.3 填写问题一1.4 重复步骤3填写其他问题1.5 编写结尾段落1.6 编写关键词 2. 问题重述2.1 问题背景2.2 问题提出 3. 问题分析4. 问题X模型的建立与求解5. 模型的分析5.1 灵敏度分析5.2 误差分析(主要用于预测类…...

嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)
嵌入式C语言面试相关知识——CPU、进程和线程相关 一、博客声明二、自问题目——CPU相关1、什么是中断?如何处理中断?2、解释上下文切换(Context Switch)?3、在嵌入式中如何优化CPU使用? 三、自问题目——进程相关1、什么是进程&a…...

Linux学习看这一篇就够了,超超超牛的Linux基础入门
引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…...

el-scrollbar组件使用踩坑记录
一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示,使用el-scrollbar组件后,发现未能成功替换掉浏览器原生导航条,二者同时出现。 引发原因 el-scrollbar的height属性如果…...

Linux计算机结构
1.计算机设计原理 冯诺依曼体系结构 通过该结构得出:中央处理器 2.操作系统整体框架 操作系统是不会让你直接乱使用底层的各种硬件,但为了依旧能够让你使用到该资源则会给你预留一些窗口去让你与其交互(类比银行,直接小窗口交互,…...

应用进程、SurfaceFlinger进程、HWC进程 之间的关系
应用进程、SurfaceFlinger进程、HWC(Hardware Composer)进程在Android系统中扮演着重要的角色,它们之间的关系和通信流程是Android图形显示系统的核心部分。以下是这三者之间关系和通信流程的详细分析: 一、三者之间的关系 应用进…...

66.Python-web框架-Django-免费模板django-datta-able的分页的一种方式
目录 1.方案介绍 1.1实现效果 1.2django.core.paginator Paginator 类: Page 类: EmptyPage 和 PageNotAnInteger 异常: 1.3 templatetags 2.方案步骤 2.1创建一个common app 2.2创建plugins/_pagination.html 2.3 其他app的views.py查询方法 2.4在AIRecords.html里…...

Python编程学习笔记(1)--- 变量和简单数据类型
1、变量 在学习编程语言之前,所接触的第一个程序,绝大多数都是: print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码,并对第二行代码进行修改,如下: message "…...

第二证券:资金抱团“高股息”,超三成A股年内创历史新低!
A股商场行情冰火两重天。 “预制菜榜首股”跌破发行价 7月8日,味知香盘中最低跌至19.26元/股,股价跌破发行价,并创前史新低。揭露资料显现,公司是集研发、生产、销售为一体的半成品菜企业,现在具有8大产品系列&#…...

ASAN排查程序中内存问题使用总结
简介 谷歌有一系列Sanitizer工具,可用于排查程序中内存相关的问题。常用的Sanitizer工具包括: Address Sanitizer(ASan):用于检测内存使用错误。Leak Sanitizer(LSan):用于检测内存…...

day01:项目概述,环境搭建
文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构:前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…...

Python爬虫与数据可视化:构建完整的数据采集与分析流程
Python爬虫技术概述 Python爬虫是一种自动化的数据采集工具,它可以模拟浏览器行为,访问网页并提取所需信息。Python爬虫的实现通常涉及以下几个步骤: 发送网页请求:使用requests库向目标网站发送HTTP请求。获取网页内容…...