leedCode - - - 栈和队列

目录

1.有效的括号( LeetCode 20 )

2.最小栈( LeetCode 155 )

3.接雨水( LeetCode 42 )

4.逆波兰表达式求值(LeetCode 150)

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

6.滑动窗口最大值( LeetCode 239 )

7.无重复字符的最长子串(LeetCode 3)

8.删除子数组的最大得分(LeetCode 1695)

9.找到字符串中所有字母异位词(LeetCode 438)

10.总结


1.有效的括号( LeetCode 20 )

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

class Solution {public boolean isValid(String s) {//当字符串的长度为奇数时,返回falseif((s.length())%2==1){return false;}Stack<Character> stack=new Stack<Character>();char[] ArrayStr=s.toCharArray();//遍历数组内所有元素for(int i=0;i<ArrayStr.length;i++){char c=ArrayStr[i];if(c=='(' || c=='{' || c=='['){stack.push(c);}else{//当要加入右括号时,栈中为空,则直接不匹配if(stack.isEmpty()){return false;}char top=stack.peek();if( (top=='(' && c==')') || (top=='{' && c=='}') || (top=='[' && c==']')){stack.pop();}else{return false;}}}return stack.isEmpty();}
}

2.最小栈( LeetCode 155 )

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 1:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]输出:
[null,null,null,null,-3,null,0,-2]解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

class MinStack {Stack<Integer> stack;Stack<Integer> minStack;public MinStack() {minStack = new Stack<>();stack = new Stack<>();}public void push(int val) {stack.push(val);if (minStack.isEmpty() || val <= minStack.peek()) {minStack.push(val);}}public void pop() {if (stack.isEmpty()) return;int val = stack.pop();if (!minStack.isEmpty() && val == minStack.peek()) {minStack.pop();}}public int top() {return stack.peek();}public int getMin() {return minStack.peek();}
}

3.接雨水( LeetCode 42 )

给定 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
class Solution {public int trap(int[] height) {// 只有两根柱子,必然无法形成一个凹槽,那么水的面积就是 0if (height.length <= 2) return 0; // 构建一个栈,用来存储对应的柱子的下标// 注意:stack 存储的是下标而非高度Stack<Integer> stack = new Stack<>();// 一开始水的面积是 0int result = 0;// 从头开始遍历整个数组for (int i = 0; i < height.length; i++) {// 如果栈为空,那么直接把当前索引加入到栈中if(stack.isEmpty()){// 把当前索引加入到栈中stack.push(i);// 否则的话,栈里面是有值的,我们需要去判断此时的元素、栈顶元素、栈顶之前的元素能否形成一个凹槽// 情况一:此时的元素小于栈顶元素,凹槽的右侧不存在,无法形成凹槽}else if (height[i] < height[stack.peek()]) {    // 把当前索引加入到栈中stack.push(i);// 情况二:此时的元素等于栈顶元素,也是无法形成凹槽} if (height[i] == height[stack.peek()]) {// 把当前索引加入到栈中stack.push(i);// 情况三:此时的的元素大于栈顶元素,有可能形成凹槽// 注意是有可能形成,因为比如栈中的元素是 2 、2 ,此时的元素是 3,那么是无法形成凹槽的} else {    // 由于栈中有可能存在多个元素,移除栈顶元素之后,剩下的元素和此时的元素也有可能形成凹槽// 因此,我们需要不断的比较此时的元素和栈顶元素// 此时的元素依旧大于栈顶元素时,我们去计算此时的凹槽面积// 借助 while 循环来实现这个操作while (!stack.empty() && height[i] > height[stack.peek()]) {// 1、获取栈顶的下标,bottom 为凹槽的底部位置int bottom = stack.peek();// 将栈顶元素推出,去判断栈顶之前的元素是否存在,即凹槽的左侧是否存在stack.pop();// 2、如果栈不为空,即栈中有元素,即凹槽的左侧存在if (!stack.empty()) {// 凹槽左侧的高度 height[stack.peek() 和 凹槽右侧的高度 height[i] // 这两者的最小值减去凹槽底部的高度就是凹槽的高度  int h = Math.min(height[stack.peek()], height[i]) - height[bottom];// 凹槽的宽度等于凹槽右侧的下标值 i 减去凹槽左侧的下标值 stack.peek 再减去 1int w = i - stack.peek() - 1; // 将计算的结果累加到最终的结果上去result += h * w;}}// 栈中和此时的元素可以形成栈的情况在上述 while 循环中都已经判断了// 那么,此时栈中的元素必然不可能大于此时的元素,所以可以把此时的元素添加到栈中stack.push(i);}}// 最后返回结果即可return result;}
}

4.逆波兰表达式求值(LeetCode 150)

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:

输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

示例 2:

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
class Solution {public int evalRPN(String[] tokens) {// 使用一个栈存储操作数,从左到右遍历逆波兰表达式Stack<Integer> result = new Stack<>();// 对于一个表达式来说,由两个操作数和一个运算符构成// 比如加法:① + ②// 比如减法:① -  ②// 比如乘法:① *  ②// 比如除法:① /  ②// 先出栈的是右操作数,后出栈的是左操作数// 先出栈的是右操作数int rightNum;// 后出栈的是左操作数int leftNum;// 一个表达式的计算结果int ans;// 遍历字符串数组for(String token : tokens){// 如果是 + if("+".equals(token)){// 先出栈的是右操作数rightNum = result.pop();// 后出栈的是左操作数leftNum = result.pop();// 计算结果ans = leftNum + rightNum;// 如果是 - }else if("-".equals(token)){// 先出栈的是右操作数rightNum = result.pop();// 后出栈的是左操作数leftNum = result.pop();// 计算结果ans = leftNum - rightNum;    // 如果是 *}else if("*".equals(token)){// 先出栈的是右操作数rightNum = result.pop();// 后出栈的是左操作数leftNum = result.pop();// 计算结果ans = leftNum * rightNum; // 如果是 /}else if("/".equals(token)){// 先出栈的是右操作数rightNum = result.pop();// 后出栈的是左操作数leftNum = result.pop();// 计算结果ans = leftNum / rightNum; // 如果是非运算符}else{// 转换为数字ans = Integer.valueOf(token);}// 存储结果result.push(ans);}// 返回栈顶元素return result.pop();}
}

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

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

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

示例 1:

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
class Solution {public int largestRectangleArea(int[] heights) {// 初始化最终结果为0int res = 0;// 使用单调栈Stack<Integer> stack = new Stack<>();// 将给定的原数组左右各添加一个元素0,方便处理int[] newHeights = new int[heights.length + 2];// 左边界为 0 newHeights[0] = 0;// 右边界边界为 0 newHeights[newHeights.length-1] = 0;// 其余不变for (int i = 1; i < heights.length + 1; i++) {newHeights[i] = heights[i - 1];}// 整体思路:// 对于一个高度,如果能得到向左和向右的边界// 那么就能对每个高度求一次面积// 遍历所有高度,即可得出最大面积// 开始遍历for (int i = 0; i < newHeights.length; i++) {// 如果栈不为空且当前考察的元素值小于栈顶元素值,// 则表示以栈顶元素值为高的矩形面积可以确定while (!stack.isEmpty() && newHeights[i] < newHeights[stack.peek()]) {// 弹出栈顶元素int cur = stack.pop();// 获取栈顶元素对应的高int curHeight = newHeights[cur];// 栈顶元素弹出后,新的栈顶元素就是其左侧边界int leftIndex = stack.peek();// 右侧边界是当前考察的索引int rightIndex = i;// 计算矩形宽度int curWidth = rightIndex - leftIndex - 1;// 计算面积res = Math.max(res, curWidth * curHeight);}// 当前考察索引入栈stack.push(i);}// 返回结果return res;}}

6.滑动窗口最大值( LeetCode 239 )

给你一个整数数组 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       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7

示例 2:

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

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {// 边界情况if(nums.length == 0 || k == 0){return new int[0];}// 构建双端队列Deque<Integer> deque = new LinkedList<>();// 构建存储最大值的数组int[] res = new int[nums.length - k + 1];// 一开始滑动窗口不包含 K 个元素,不是合格的滑动窗口for(int i = 0; i < k; i++) {// 在滑动过程中,维护好 deque,确保它是单调递减队列// 反复判断,如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。// 直到考察元素可以放入到队列中while(!deque.isEmpty() && deque.peekLast() < nums[i]){deque.removeLast();}// 考察元素可以放入到队列中deque.addLast(nums[i]);}// 这个时候,滑动窗口刚刚好有 k 个元素,是合格的滑动窗口,那么最大值就是队列中的队首元素res[0] = deque.peekFirst();// 现在让滑动窗口滑动for(int i = k; i < nums.length; i++) {// 滑动窗口已经装满了元素,向右移动会把窗口最左边的元素抛弃// i - k 为滑动窗口的最左边// 如果队列的队首元素和窗口最左边的元素相等,需要将队首元素抛出if(deque.peekFirst() == nums[i - k]){deque.removeFirst();}// 反复判断,如果队列不为空且当前考察元素大于等于队尾元素,则将队尾元素移除。// 直到考察元素可以放入到队列中while(!deque.isEmpty() && deque.peekLast() < nums[i]){deque.removeLast();}// 考察元素可以放入到队列中deque.addLast(nums[i]);// 此时,结果数组的值就是队列的队首元素res[i - k + 1] = deque.peekFirst();}// 最后返回 resreturn res;}
}

7.无重复字符的最长子串(LeetCode 3)

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题:滑动窗口+哈希表

使用哈希表的作用:

  1. 快速查找:哈希表通常允许在平均 O(1) 时间复杂度内进行查找、插入和删除操作。
  2. 键值映射:它通过哈希函数将键映射到表中的位置,支持根据键快速获取相关联的值。
  3. 去重:可以用于存储唯一的元素,防止重复值出现。

class Solution {public int lengthOfLongestSubstring(String s) {//定义记录最大长度的变量int maxLong=0;//涉及到去重,使用hash表HashSet<Character> hash=new HashSet<Character>();//设置滑动窗口的起始和结束int start=0;int end=0;for(end=0;end<s.length();end++){while(hash.contains(s.charAt(end))){hash.remove(s.charAt(start));start++;}hash.add(s.charAt(end));maxLong=Math.max(maxLong,end-start+1);}return maxLong;}
}

8.删除子数组的最大得分(LeetCode 1695)

给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组删除子数组的 得分 就是子数组各元素之 。

返回 只删除一个 子数组可获得的 最大得分 。

如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],a[l+1],...,a[r] ,那么它就是 a 的一个子数组。

示例 1:

输入:nums = [4,2,4,5,6]
输出:17
解释:最优子数组是 [2,4,5,6]

和上题基本思路一致,只是多了一步计算哈希表中的和。

class Solution {public int maximumUniqueSubarray(int[] nums) {//构造哈希表存放不同的元素HashSet<Integer> hash=new HashSet<Integer>();//记录得分int sum=0;//记录最大得分int largest=0;//定义滑动窗口的起始和末尾int start=0;int end=0;//开始移动滑动窗口for(end=0;end<nums.length;end++){while(hash.contains(nums[end])){hash.remove(nums[start]);sum-=nums[start];start++;}hash.add(nums[end]);sum+=nums[end];//最大得分largest=Math.max(largest,sum);}return largest;}
}

9.找到字符串中所有字母异位词(LeetCode 438)

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

class Solution {public List<Integer> findAnagrams(String s, String p) {//构造存放结果的ListList<Integer> result=new ArrayList();//need[]存放pz中所有字母出现的频次int[] need=new int[26];for(char ch:p.toCharArray()){need[ch-'a']++;}//定义数组windows[]存放滑动窗口的字母频次int[] windows=new int[26];//定义滑动窗口int start=0;int end=0;for(end=0;end<s.length();end++){//end指的数char cur=s.charAt(end);//end指向的字母,windows[]中的频次加一windows[cur-'a']++;//添加后比较needs[]和windows[]是否相同,相同将start记录到result中if(isSame(need,windows)){result.add(start);}//滑动窗口的长度超出p的长度后,需要将start的字母频次减一,在将start往后移动if(end>=p.length()-1){char ch=s.charAt(start);windows[ch-'a']--;start++;}}return result;}public boolean isSame(int[]a,int[]b){for(int i=0;i<a.length;i++){if( a[i]!=b[i]){return false;}}return true;}
}

10.总结

1.栈的实现 Stack<xxx> stack = new Stack<>();常用方法push()、pop()、peek()

2.队列的实现 Queue<xxx> queue = new LinkedList<>();add()、poll()、peek()、removeLast()、addFirst()、peekFirst()...

3.递增栈和递减栈来解决特殊问题(较难)

4.选择使用数组或者哈希表存储:数组连续(比如上面的26个字母)内存简单、哈希表不连续HashSet保证元素的唯一性,支持高效的插入、删除和查找操作、但存储和处理的开销较大。

5.滑动窗口和哈希表的结合可以有效地解决许多涉及子数组或子字符串的问题

   滑动窗口技巧

  1. 窗口大小:

    • 固定大小窗口:窗口的大小在整个过程保持不变,常用于寻找具有特定长度的子数组或子字符串。例如,9.找到字符串中所有字母异位词、6.滑动窗口最大值

    • 可变大小窗口:窗口大小根据条件动态调整,常用于找到符合特定条件的最小子数组或子字符串。例如,7.无重复字符的最长子串、8.删除子数组的最大得分 

  2. 双指针技术:

    • 使用两个指针(通常是左指针和右指针)来表示当前的窗口范围,右指针向右移动以扩大窗口,左指针向右移动以缩小窗口。

  3. 窗口条件:

    • 需要维护窗口中的某些信息(如计数、和、最大值等),并根据条件调整窗口大小

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/399570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计选题推荐-大学生就业招聘管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【Redis】Redis 初探:特性、应用场景与高并发架构演进之路

目录 初识 Redis关于 Redis服务端高并发分布式结构演进之路概述常⻅概念基本概念应⽤&#xff08;Application&#xff09;/ 系统&#xff08;System&#xff09;模块&#xff08;Module&#xff09;/ 组件&#xff08;Component&#xff09;分布式&#xff08;Distributed&…

SSM养老院信息管理系统—计算机毕业设计源码16963

目 录 摘要 1 绪论 1.1研究意义 1.2开发意义 1.3ssm框架介绍 1.4论文结构与章节安排 2 养老院信息管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.…

C++ STL初阶(9):list 中关于reverse_iterator的实现

在完成vector和list的iterator相关部分的实践后来完成反向迭代器的实现 1. list的反向迭代器 书接上回&#xff0c;反向迭代器应当重新封装一个类。 反向迭代器和正向迭代器最大的区别就是&#xff0c;反向迭代器是倒着走的&#xff0c;所以最核心的逻辑就是将封装成-- 注意&am…

Cadence Allegro 入门教程笔记:如何绘制原理图和原理图库?

文章目录 一、用 Capture CIS 17.4 绘制原理图库 Cadence Allegro QQ交流学习裙&#xff1a;173416628 1、凡亿教育的Cadence Allegro 17.4基础教程 2、小哥Cadence Allegro 132讲 技巧视频 3、小哥Cadence Allegro 两层板 基础视频 4、小哥Cadence Allegro 四层板 提高视频…

【NLP】文本处理的基本方法【jieba分词、命名实体、词性标注】

文章目录 1、本章目标2、什么是分词3、jieba的使用3.1、精确模式分词3.2、全模式分词3.3、搜索引擎模式分词3.4、中文繁体分词3.5、使用用户自定义词典 4、什么是命名实体识别5、什么是词性标注6、小结7、jieba词性对照表⭐ &#x1f343;作者介绍&#xff1a;双非本科大三网络…

opencv-python图像增强三:图像清晰度增强

文章目录 一、简介&#xff1a;二、图像清晰度增强方案&#xff1a;三、算法实现步骤3.1高反差保留实现3.2. usm锐化3.3 Overlay叠加 四&#xff1a;整体代码实现五&#xff1a;效果 一、简介&#xff1a; 你是否有过这样的烦恼&#xff0c;拍出来的照片总是不够清晰&#xff…

【Linux】网络编程套接字Scoket:UDP网络编程

目录 一、了解UDP协议 二、了解端口和IP地址 三、套接字概述与Socket的概念 四、Socket的类型 五、 Socket的信息数据结构 六、网络字节序与主机字节序的互相转换 七、地址转换函数 八、UDP网络编程流程及相关函数 socket函数 bind函数 recvfrom函数 sendto函数 …

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…

C语言 ——— 学习、使用memmove函数 并模拟实现

目录 memmvoe函数的功能 学习memmove函数​编辑 模拟实现memmove函数 memmvoe函数的功能 memmvoe函数的功能类似于memcpy函数&#xff0c;都是内存拷贝&#xff0c;唯一的区别是memcpy函数不能成功拷贝原数据&#xff0c;而memmvoe函数可以 举例来说&#xff1a; [1, 2, 3…

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文&#xff0c;特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置&#xff0c;以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天&#xff0c;数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力&#xff0c;成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局&#xff0c;依托自身在大数据管理与应用领域的深厚底蕴&#xff0c;携手业界76…

CUDA Programming - (1) CUDA简介

1. GPU 简介 处理器一般包含以下几部分&#xff1a;Cache 缓存&#xff0c;ALU 计算单元&#xff0c;Control 控制中心&#xff0c;RAM 内存。 CPU&#xff08;Central Processing Unit&#xff09;&#xff1a;中央处理器。适合进行逻辑&#xff0c;ALU计算核心较少。适合控…

企业源代码加密软件有哪些?2024最好用的十款源代码加密软件

在当今快速发展的技术环境中&#xff0c;企业源代码的安全性至关重要。源代码不仅包含着企业的核心知识产权&#xff0c;还可能涉及敏感的商业数据。因此&#xff0c;选择一款合适的源代码加密软件&#xff0c;对于保护企业资产和避免数据泄露风险至关重要。随着安全技术的不断…

Codeforces Pinely Round 4 (Div. 1 + Div. 2) A~G

A.Maximize the Last Element&#xff08;枚举&#xff09; 题意&#xff1a; 给你一个由 n n n个整数组成的数组 a a a&#xff0c;其中 n n n是奇数。 在一次操作中&#xff0c;你将从数组 a a a中删除两个相邻的元素&#xff0c;然后将数组的剩余部分连接起来。例如&…

git常见命令和常见问题解决

文章目录 常见命令问题问题1&#xff08;git push相关&#xff09;问题2&#xff08;git push相关&#xff09;问题3&#xff08;git push相关&#xff09;删除github的仓库github新创建本地仓库的操作…or create a new repository on the command line…or push an existing …

led台灯对眼睛好不好?揭秘使用护眼台灯能不能有效预防近视

在当前社会&#xff0c;近视的影响不容小视&#xff0c;除了对视觉健康的影响外&#xff0c;近视还可能对个人的心理健康产生负面影响。视力不佳可能导致自卑感和社会交往障碍&#xff0c;尤其是在儿童和青少年时期。保护视力健康要从小做起&#xff0c;家长们可以关注孩子的用…

[openSSL]TLS 1.3握手分析

文章目录 前言一、ECDHE密钥交换二、TLS单向身份认证三、TLS双向身份认证 前言 关于TLS握手网上资料很多&#xff0c;但是有一些写的很不清楚&#xff0c;导致学习时对概念和流程出现混淆&#xff0c;以下是我觉得写得比较清晰和准确的供学习参考。 浅析 TLS&#xff08;ECDHE…

超算互联网-Stable Diffusion 2.1文生图教程

一、名词简介 1. 超算互联网 超算互联网是一种基于云计算的高性能计算平台&#xff0c;用户可以通过互联网接入超级计算资源。它集成了大量的计算节点&#xff0c;提供强大的计算能力&#xff0c;适用于科学计算、深度学习、人工智能等领域。用户可以利用超算互联网平台运行复…

老阳推荐的temu选品师项目能不能做成?

在不断变化的电商领域&#xff0c;temU选品师项目作为一种新兴职业&#xff0c;受到了越来越多的关注。老阳的推荐使得这一项目引起了不少人的兴趣&#xff0c;那么&#xff0c;temU选品师项目究竟能否成功呢?让我们从一个新的角度来探讨这一问题。 新兴市场的机遇与挑战 temU…