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

【2024年华为OD机试】 (C卷,100分)- 括号匹配(Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

题目描述

给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。
若括号成对出现且嵌套关系正确,或该字符串中无括号字符,输出:true
若未正确使用括号字符,输出:false
实现时,无需考虑非法输入。

输入描述

输出描述

用例

用例 1

输入:

(1+2)/(0.5+1)

输出:

true

解题思路

  1. 使用栈

    • 使用一个栈来跟踪未匹配的左括号。
    • 遍历字符串,对于每个字符:
      • 如果是左括号((, [, {),将其压入栈中。
      • 如果是右括号(), ], }),检查栈顶是否有对应的左括号:
        • 如果有,弹出栈顶的左括号。
        • 如果没有,返回 false
    • 遍历结束后,如果栈为空,说明所有括号都正确匹配,返回 true
    • 如果栈不为空,说明有未匹配的左括号,返回 false
  2. 特殊情况

    • 如果字符串中没有括号字符,直接返回 true

详细步骤

  1. 读取输入

    • 从标准输入读取一个字符串。
  2. 初始化栈

    • 创建一个空栈 stack,用于存储未匹配的左括号。
  3. 遍历字符串

    • 遍历字符串中的每个字符 char
      • 如果 char 是左括号((, [, {),将其压入栈中。
      • 如果 char 是右括号(), ], }):
        • 检查栈顶是否有对应的左括号:
          • 如果有,弹出栈顶的左括号。
          • 如果没有,返回 false
  4. 检查栈是否为空

    • 遍历结束后,如果栈为空,返回 true
    • 如果栈不为空,返回 false

用例解释

用例 1
  • 输入:
    • (1+2)/(0.5+1)
  • 输出:
    • true

解释

  • 遍历字符串:
    • 遇到 (,压入栈中。
    • 遇到 ),检查栈顶是否有 (,有则弹出。
    • 遇到 (,压入栈中。
    • 遇到 ),检查栈顶是否有 (,有则弹出。
  • 遍历结束后,栈为空,说明所有括号都正确匹配,返回 true

通过上述步骤,我们可以高效地检查字符串中的括号是否成对出现且嵌套关系正确。这种方法的时间复杂度为 O(n),其中 n 是字符串的长度。

二、JavaScript算法源码

以下是 JavaScript 代码 的详细中文注释和逻辑讲解:


JavaScript 代码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");// 创建 readline 接口,用于从控制台读取输入
const rl = readline.createInterface({input: process.stdin,  // 输入流output: process.stdout, // 输出流
});// 监听输入事件
rl.on("line", (line) => {// 调用 getResult 函数处理输入,并输出结果console.log(getResult(line));
});// 算法入口
function getResult(line) {// 定义正则表达式,匹配非括号字符const regExp = /[^\(\)\[\]\{\}]/g;// 去除非括号字符line = line.replace(regExp, "");// 定义括号映射关系const map = {")": "(", // 右圆括号对应左圆括号"]": "[", // 右方括号对应左方括号"}": "{", // 右花括号对应左花括号};// 使用栈来检查括号是否匹配const stack = [];// 遍历处理后的字符串for (let c of line) {// 如果栈不为空,且当前字符是右括号if (stack.length && map[c]) {// 检查栈顶元素是否是对应的左括号if (stack.at(-1) === map[c]) {stack.pop(); // 匹配成功,弹出栈顶元素continue;} else {return false; // 匹配失败,返回 false}}// 将当前字符压入栈中stack.push(c);}// 如果栈为空,说明所有括号都匹配成功return stack.length == 0;
}

代码逻辑讲解

1. 输入获取
  • 使用 readline 模块从控制台读取输入。
  • 监听 line 事件,当用户输入一行内容时,调用 getResult 函数处理。
2. 算法入口
  • 步骤 1:定义正则表达式 regExp,用于匹配非括号字符。
    • 正则表达式 /[^\(\)\[\]\{\}]/g 表示匹配所有非括号字符。
  • 步骤 2:使用 replace 方法去除非括号字符。
    • 例如,输入 "a(b{c}d)e",处理后得到 "({})"
  • 步骤 3:定义括号映射关系 map
    • 右括号作为键,左括号作为值。
  • 步骤 4:使用栈 stack 来检查括号是否匹配。
    • 遍历处理后的字符串:
      • 如果当前字符是右括号,检查栈顶元素是否是对应的左括号。
        • 如果匹配成功,弹出栈顶元素。
        • 如果匹配失败,返回 false
      • 如果当前字符是左括号,直接压入栈中。
  • 步骤 5:遍历结束后,检查栈是否为空。
    • 如果栈为空,说明所有括号都匹配成功,返回 true
    • 如果栈不为空,说明有未匹配的括号,返回 false

示例运行

输入
a(b{c}d)e
处理步骤
  1. 去除非括号字符,得到 "({})"
  2. 遍历字符串:
    • 遇到 "(",压入栈中,栈为 ["("]
    • 遇到 "{",压入栈中,栈为 ["(", "{"]
    • 遇到 "}",检查栈顶元素 "{",匹配成功,弹出栈顶元素,栈为 ["("]
    • 遇到 ")",检查栈顶元素 "(",匹配成功,弹出栈顶元素,栈为 []
  3. 遍历结束,栈为空,返回 true
输出
true

总结

  • 功能:检查输入字符串中的括号是否匹配。
  • 核心逻辑
    1. 去除非括号字符。
    2. 使用栈检查括号是否匹配。
  • 适用场景:需要检查括号匹配的场景,例如代码语法检查。
  • 注意事项
    • 输入字符串可能包含非括号字符,需要先去除。
    • 栈的使用是解决括号匹配问题的经典方法。

如果有其他问题,欢迎随时提问!

三、Java算法源码

以下是 Java 代码 的详细中文注释和逻辑讲解:


Java 代码

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;public class Main {// 输入获取public static void main(String[] args) {Scanner sc = new Scanner(System.in); // 创建 Scanner 对象,用于从控制台读取输入String s = sc.nextLine(); // 读取一行输入System.out.println(getResult(s)); // 调用 getResult 方法处理输入,并输出结果}// 算法入口public static boolean getResult(String s) {// 去除非括号字符s = s.replaceAll("[^\\(\\)\\[\\]\\{\\}]", ""); // 使用正则表达式去除非括号字符// 定义括号映射关系HashMap<Character, Character> map = new HashMap<>();map.put(')', '('); // 右圆括号对应左圆括号map.put(']', '['); // 右方括号对应左方括号map.put('}', '{'); // 右花括号对应左花括号// 使用栈来检查括号是否匹配LinkedList<Character> stack = new LinkedList<>();// 遍历处理后的字符串for (int i = 0; i < s.length(); i++) {char c = s.charAt(i); // 获取当前字符// 如果栈不为空,且当前字符是右括号if (stack.size() > 0 && map.containsKey(c)) {// 检查栈顶元素是否是对应的左括号if (stack.getLast() == map.get(c)) {stack.removeLast(); // 匹配成功,弹出栈顶元素continue;} else {return false; // 匹配失败,返回 false}}// 将当前字符压入栈中stack.add(c);}// 如果栈为空,说明所有括号都匹配成功return stack.size() == 0;}
}

代码逻辑讲解

1. 输入获取
  • 使用 Scanner 类从控制台读取输入。
  • 调用 sc.nextLine() 读取一行输入,并将其存储在字符串 s 中。
2. 算法入口
  • 步骤 1:使用正则表达式去除非括号字符。
    • 正则表达式 [^\\(\\)\\[\\]\\{\\}] 表示匹配所有非括号字符。
    • 例如,输入 "a(b{c}d)e",处理后得到 "({})"
  • 步骤 2:定义括号映射关系 map
    • 使用 HashMap 存储右括号和左括号的对应关系。
  • 步骤 3:使用栈 stack 来检查括号是否匹配。
    • 遍历处理后的字符串:
      • 如果当前字符是右括号,检查栈顶元素是否是对应的左括号。
        • 如果匹配成功,弹出栈顶元素。
        • 如果匹配失败,返回 false
      • 如果当前字符是左括号,直接压入栈中。
  • 步骤 4:遍历结束后,检查栈是否为空。
    • 如果栈为空,说明所有括号都匹配成功,返回 true
    • 如果栈不为空,说明有未匹配的括号,返回 false

示例运行

输入
a(b{c}d)e
处理步骤
  1. 去除非括号字符,得到 "({})"
  2. 遍历字符串:
    • 遇到 "(",压入栈中,栈为 ["("]
    • 遇到 "{",压入栈中,栈为 ["(", "{"]
    • 遇到 "}",检查栈顶元素 "{",匹配成功,弹出栈顶元素,栈为 ["("]
    • 遇到 ")",检查栈顶元素 "(",匹配成功,弹出栈顶元素,栈为 []
  3. 遍历结束,栈为空,返回 true
输出
true

总结

  • 功能:检查输入字符串中的括号是否匹配。
  • 核心逻辑
    1. 去除非括号字符。
    2. 使用栈检查括号是否匹配。
  • 适用场景:需要检查括号匹配的场景,例如代码语法检查。
  • 注意事项
    • 输入字符串可能包含非括号字符,需要先去除。
    • 栈的使用是解决括号匹配问题的经典方法。

如果有其他问题,欢迎随时提问!

四、Python算法源码

以下是 Python 代码 的详细中文注释和逻辑讲解:


Python 代码

import re  # 导入正则表达式模块# 输入获取
s = input()  # 从控制台读取一行输入# 算法入口
def getResult(s):# 去除非括号字符s = re.sub(r"[^\(\)\[\]\{\}]", "", s)  # 使用正则表达式去除非括号字符# 定义括号映射关系map = {")": "(",  # 右圆括号对应左圆括号"]": "[",  # 右方括号对应左方括号"}": "{",  # 右花括号对应左花括号}# 使用栈来检查括号是否匹配stack = []# 遍历处理后的字符串for i in range(len(s)):c = s[i]  # 获取当前字符# 如果栈不为空,且当前字符是右括号if len(stack) > 0 and map.get(c) is not None:# 检查栈顶元素是否是对应的左括号if stack[-1] == map[c]:stack.pop()  # 匹配成功,弹出栈顶元素continueelse:return False  # 匹配失败,返回 False# 将当前字符压入栈中stack.append(c)# 如果栈为空,说明所有括号都匹配成功return len(stack) == 0# 算法调用
print(str(getResult(s)).lower())  # 调用 getResult 方法处理输入,并输出结果(转换为小写)

代码逻辑讲解

1. 输入获取
  • 使用 input() 函数从控制台读取一行输入,并将其存储在变量 s 中。
2. 算法入口
  • 步骤 1:使用正则表达式去除非括号字符。
    • 正则表达式 r"[^\(\)\[\]\{\}]" 表示匹配所有非括号字符。
    • 例如,输入 "a(b{c}d)e",处理后得到 "({})"
  • 步骤 2:定义括号映射关系 map
    • 使用字典存储右括号和左括号的对应关系。
  • 步骤 3:使用栈 stack 来检查括号是否匹配。
    • 遍历处理后的字符串:
      • 如果当前字符是右括号,检查栈顶元素是否是对应的左括号。
        • 如果匹配成功,弹出栈顶元素。
        • 如果匹配失败,返回 False
      • 如果当前字符是左括号,直接压入栈中。
  • 步骤 4:遍历结束后,检查栈是否为空。
    • 如果栈为空,说明所有括号都匹配成功,返回 True
    • 如果栈不为空,说明有未匹配的括号,返回 False
3. 算法调用
  • 调用 getResult(s) 方法处理输入,并将结果转换为字符串后输出(转换为小写)。

示例运行

输入
a(b{c}d)e
处理步骤
  1. 去除非括号字符,得到 "({})"
  2. 遍历字符串:
    • 遇到 "(",压入栈中,栈为 ["("]
    • 遇到 "{",压入栈中,栈为 ["(", "{"]
    • 遇到 "}",检查栈顶元素 "{",匹配成功,弹出栈顶元素,栈为 ["("]
    • 遇到 ")",检查栈顶元素 "(",匹配成功,弹出栈顶元素,栈为 []
  3. 遍历结束,栈为空,返回 True
输出
true

总结

  • 功能:检查输入字符串中的括号是否匹配。
  • 核心逻辑
    1. 去除非括号字符。
    2. 使用栈检查括号是否匹配。
  • 适用场景:需要检查括号匹配的场景,例如代码语法检查。
  • 注意事项
    • 输入字符串可能包含非括号字符,需要先去除。
    • 栈的使用是解决括号匹配问题的经典方法。

如果有其他问题,欢迎随时提问!

五、C/C++算法源码:

以下是 C++ 代码C 语言代码 的实现,并附带详细的中文注释和逻辑讲解。


C++ 代码

#include <iostream>
#include <stack>
#include <unordered_map>
#include <string>
using namespace std;// 算法入口
bool getResult(string s) {// 去除非括号字符string filtered;for (char c : s) {if (c == '(' || c == ')' || c == '[' || c == ']' || c == '{' || c == '}') {filtered += c; // 只保留括号字符}}// 定义括号映射关系unordered_map<char, char> map = {{')', '('},{']', '['},{'}', '{'}};// 使用栈来检查括号是否匹配stack<char> stack;// 遍历处理后的字符串for (char c : filtered) {// 如果栈不为空,且当前字符是右括号if (!stack.empty() && map.count(c)) {// 检查栈顶元素是否是对应的左括号if (stack.top() == map[c]) {stack.pop(); // 匹配成功,弹出栈顶元素continue;} else {return false; // 匹配失败,返回 false}}// 将当前字符压入栈中stack.push(c);}// 如果栈为空,说明所有括号都匹配成功return stack.empty();
}int main() {// 输入获取string s;getline(cin, s); // 读取一行输入// 算法调用cout << boolalpha << getResult(s) << endl; // 输出结果(boolalpha 用于输出 true/false)return 0;
}

C++ 代码逻辑讲解

1. 输入获取
  • 使用 getline(cin, s) 从控制台读取一行输入,并将其存储在字符串 s 中。
2. 算法入口
  • 步骤 1:去除非括号字符。
    • 遍历字符串 s,只保留括号字符((, ), [, ], {, })。
    • 将过滤后的字符存储在 filtered 字符串中。
  • 步骤 2:定义括号映射关系 map
    • 使用 unordered_map 存储右括号和左括号的对应关系。
  • 步骤 3:使用栈 stack 来检查括号是否匹配。
    • 遍历处理后的字符串 filtered
      • 如果当前字符是右括号,检查栈顶元素是否是对应的左括号。
        • 如果匹配成功,弹出栈顶元素。
        • 如果匹配失败,返回 false
      • 如果当前字符是左括号,直接压入栈中。
  • 步骤 4:遍历结束后,检查栈是否为空。
    • 如果栈为空,说明所有括号都匹配成功,返回 true
    • 如果栈不为空,说明有未匹配的括号,返回 false
3. 算法调用
  • 调用 getResult(s) 方法处理输入,并输出结果(boolalpha 用于输出 true/false 而不是 1/0)。

C 语言代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>// 定义栈结构
typedef struct {char data[1000]; // 栈数据int top;         // 栈顶指针
} Stack;// 初始化栈
void initStack(Stack *stack) {stack->top = -1;
}// 压栈
void push(Stack *stack, char c) {stack->data[++stack->top] = c;
}// 弹栈
char pop(Stack *stack) {return stack->data[stack->top--];
}// 获取栈顶元素
char top(Stack *stack) {return stack->data[stack->top];
}// 判断栈是否为空
bool isEmpty(Stack *stack) {return stack->top == -1;
}// 算法入口
bool getResult(char *s) {// 去除非括号字符char filtered[1000];int j = 0;for (int i = 0; s[i] != '\0'; i++) {if (s[i] == '(' || s[i] == ')' || s[i] == '[' || s[i] == ']' || s[i] == '{' || s[i] == '}') {filtered[j++] = s[i]; // 只保留括号字符}}filtered[j] = '\0'; // 字符串结束符// 定义括号映射关系char map[256] = {0};map[')'] = '(';map[']'] = '[';map['}'] = '{';// 使用栈来检查括号是否匹配Stack stack;initStack(&stack);// 遍历处理后的字符串for (int i = 0; filtered[i] != '\0'; i++) {char c = filtered[i];// 如果栈不为空,且当前字符是右括号if (!isEmpty(&stack) && map[c] != 0) {// 检查栈顶元素是否是对应的左括号if (top(&stack) == map[c]) {pop(&stack); // 匹配成功,弹出栈顶元素continue;} else {return false; // 匹配失败,返回 false}}// 将当前字符压入栈中push(&stack, c);}// 如果栈为空,说明所有括号都匹配成功return isEmpty(&stack);
}int main() {// 输入获取char s[1000];fgets(s, sizeof(s), stdin); // 读取一行输入// 算法调用printf("%s\n", getResult(s) ? "true" : "false"); // 输出结果return 0;
}

C 语言代码逻辑讲解

1. 输入获取
  • 使用 fgets(s, sizeof(s), stdin) 从控制台读取一行输入,并将其存储在字符数组 s 中。
2. 算法入口
  • 步骤 1:去除非括号字符。
    • 遍历字符串 s,只保留括号字符((, ), [, ], {, })。
    • 将过滤后的字符存储在 filtered 字符数组中。
  • 步骤 2:定义括号映射关系 map
    • 使用字符数组 map 存储右括号和左括号的对应关系。
  • 步骤 3:使用栈 stack 来检查括号是否匹配。
    • 遍历处理后的字符串 filtered
      • 如果当前字符是右括号,检查栈顶元素是否是对应的左括号。
        • 如果匹配成功,弹出栈顶元素。
        • 如果匹配失败,返回 false
      • 如果当前字符是左括号,直接压入栈中。
  • 步骤 4:遍历结束后,检查栈是否为空。
    • 如果栈为空,说明所有括号都匹配成功,返回 true
    • 如果栈不为空,说明有未匹配的括号,返回 false
3. 算法调用
  • 调用 getResult(s) 方法处理输入,并输出结果(truefalse)。

总结

  • 功能:检查输入字符串中的括号是否匹配。
  • 核心逻辑
    1. 去除非括号字符。
    2. 使用栈检查括号是否匹配。
  • 适用场景:需要检查括号匹配的场景,例如代码语法检查。
  • 注意事项
    • 输入字符串可能包含非括号字符,需要先去除。
    • 栈的使用是解决括号匹配问题的经典方法。

如果有其他问题,欢迎随时提问!

相关文章:

【2024年华为OD机试】 (C卷,100分)- 括号匹配(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个字符串&#xff0c;里边可能包含“()”、“[]”、“{}”三种括号&#xff0c;请编写程序检查该字符串中的括号是否成对出现&#xff0c;且嵌套关系正确。 若括号成对出现且嵌套关系正确&#xff0c;或该字符串中无括号字符&#xff0c;输出&am…...

解锁企业数字化转型新力量:OpenCoze(开源扣子)

在当今数字化浪潮席卷之下&#xff0c;企业对于高效管理和协同运作的需求愈发迫切&#xff0c;而开源技术正逐渐成为众多企业破局的关键利器。今天&#xff0c;想给大家介绍一款极具潜力的开源项目 ——OpenCoze&#xff0c;中文名称 “开源扣子”。 一、OpenCoze 是什么&…...

【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论和实操考试题解析

文章目录 选择题答案及解析理论题答案及解析实操题答案及解析下一步进阶 选择题答案及解析 RIP路由协议是基于哪种算法的动态路由协议&#xff1f; 答案&#xff1a;B. 距离矢量算法解析&#xff1a;链路状态算法用于OSPF等协议&#xff1b;最小生成树算法主要用于生成树协议&…...

【微服务】8、分布式事务 ( XA 和 AT )

文章目录 利用Seata解决分布式事务问题&#xff08;XA模式&#xff09;AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…...

CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞

漏洞描述 GiveWP 插件中发现了一个严重漏洞&#xff0c;该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777&#xff0c;CVSS 评分为 9.8&#xff0c;表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装&#xff0c;为全球无数捐赠平…...

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…...

基于 SSH 的任务调度系统

文末附有完整项目代码 在当今科技飞速发展的时代&#xff0c;任务调度系统的重要性日益凸显。本文将详细介绍一个基于 SSH&#xff08;SpringStruts2Hibernate&#xff09;的任务调度系统的设计与实现。 一、系统概述 本系统旨在改变传统人工任务调度方式&#xff0c;通过计算…...

filestream安装使用全套+filebeat的模块用法

1 filestream介绍 官方宣布&#xff1a;输入类型为log在filebeat7.16版本已经弃用了 Filestream 是 Filebeat 中的一种 输入类型&#xff08;Input&#xff09;&#xff0c;用于处理日志文件的读取。它是为了取代 Filebeat 中传统的 log 输入&#xff08;Input&#xff09;设…...

java项目之房屋租赁系统源码(springboot+mysql+vue)

项目简介 房屋租赁系统实现了以下功能&#xff1a; 房屋租赁系统的主要使用者分为&#xff1a; 系统管理&#xff1a;个人中心、房屋信息管理、预约看房管理、合同信息管理、房屋报修管理、维修处理管理、房屋评价管理等模块的查看及相应操作&#xff1b; 房屋信息管理&#…...

sap mm学习笔记

1. 业务流程 2. 组织架构 3. 物料主数据 4.采购主数据 5. 采购管理 6. 库存管理 7.物料主数据 8. 采购申请 ME51N...

代码随想录_链表

代码随想录02 链表 203.移除链表元素 力扣题目链接(opens new window) 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#xff1a;he…...

EF Code 并发控制

【悲观控制】 不推荐用&#xff0c;EF Core 没有封装悲观并发控制的使用&#xff0c;需要使用原生Sql来使用悲观并发控制 一般使用行锁、表锁等排他锁对资源进行锁定&#xff0c;同时只有一个使用者操作被锁定的资源 拿sql server举例&#xff0c;可以使用表所、或者行所解决…...

ceph fs status 输出详解

ceph fs status 命令用于显示 Ceph 文件系统的状态信息&#xff0c;其中各列的含义如下&#xff1a; RANK&#xff1a;元数据服务器&#xff08;MDS&#xff09;的等级或标识符。 STATE&#xff1a;MDS 的当前状态&#xff0c;例如 active&#xff08;活跃&#xff09;、stan…...

FFmpeg Muxer HLS

使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法&#xff1a; ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…...

如何用SQL语句来查询表或索引的行存/列存存储方式|OceanBase 用户问题集锦

一、问题背景 自OceanBase 4.3.0版本起&#xff0c;支持了列存引擎&#xff0c;允许表和索引以行存、纯列存或行列冗余的形式创建&#xff0c;且这些存储方式可以自由组合。除了使用 show create table命令来查看表和索引的存储类型外&#xff0c;也有用户询问如何通过SQL语句…...

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…...

【OpenGL/Assimp】渲染模型、半透明材质与封装光源

文章目录 渲染成果Assimp库准备&#xff1a;Mesh类修改&#xff1a;透明贴图使用&#xff1a;光源封装&#xff1a;使用方式在如下测试环境中&#xff1a; 渲染成果 Assimp库准备&#xff1a; 从GitHub拉取源码&#xff0c;根据网络教程&#xff0c;借助CMake生成VS工程项目&a…...

pandas与sql对应关系【帮助sql使用者快速上手pandas】

本页旨在提供一些如何使用pandas执行各种SQL操作的示例&#xff0c;来帮助SQL使用者快速上手使用pandas。 目录 SQL语法一、选择SELECT1、选择2、添加计算列 二、连接JOIN ON1、内连接2、左外连接3、右外连接4、全外连接 三、过滤WHERE1、AND2、OR3、IS NULL4、IS NOT NULL5、B…...

Linux WEB漏洞

定义&#xff1a;Linux Web 漏洞是指在基于 Linux 操作系统的 Web 应用程序、Web 服务器软件或者相关的网络服务配置中存在的安全弱点。这些漏洞可能导致攻击者未经授权访问敏感信息、篡改网页内容、执行恶意代码&#xff0c;甚至完全控制服务器。 常见类型及原理 SQL 注入漏…...

音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流

通过FFmpeg命令可以将一个媒体文件转推RTP&#xff1a; ffmpeg -re -stream_loop -1 -i input.mp4 -c:v copy -an -f rtp rtp://192.168.0.102:5400 但是通过ffplay尝试播放上述产生的RTP流时会报错&#xff1a;“Unable to receive RTP payload type 96 without an SDP file …...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...