ACM模式下算法题输入输出攻略【C++】

news2024/11/15 17:40:24

文章目录

    • @[TOC]
  • 1. 核心代码模式与ACM模式
    • 1.1 ACM模式介绍
    • 1.2 注意事项
  • 2. C++常用的输入输出方法
      • 2.1 输入
        • 2.1.1 `cin`
        • 注意事项
        • 2.1.2 `getline()`
        • 注意事项
        • 2.1.3 `getchar()`
        • 注意事项
      • 2.2 输出
  • 3. 案例
    • 3.1 一维数组输入
      • 3.1.1 固定长度的一维数组
      • 3.1.2 不固定长度的一维数组
    • 3.2 二维数组输入
      • 3.2.1 常规模式的二维数组输入
      • 3.2.2 每行数据用逗号分隔的二维数组输入
    • 3.3 字符串输入
      • 3.3.1 单字符串输入
      • 3.3.2 多字符串输入(固定个数)
      • 3.3.3 多字符串输入(不固定个数)
      • 3.3.4 字符串转整数数组
  • 4. ACM模式练习平台
    • 4.1 练习平台推荐
    • 4.2 实战平台案例
  • 5. 常见数据结构定义
    • 5.1 链表
    • 5.2 二叉树

八月份快结束了,秋招提前批和秋招也陆续开始了。在一般大厂笔试中都会要求手撕算法,如果算法正确,最后输出的时候没解决好就很吃亏啦~所以今天这篇文章带你详细理解核心代码模式与ACM模式下需要注意的事项。

1. 核心代码模式与ACM模式

1.1 ACM模式介绍

在编程竞赛和笔试中,ACM模式是常见的要求,它需要我们编写完整的程序来处理输入输出。与平台上的核心代码模式不同,ACM模式通常要求我们处理标准输入输出并完整实现解决方案。核心代码模式只需要提交核心算法部分(通常是某一个函数),而ACM模式需要处理整个程序(包括main函数),包括输入输出和其他程序结构。

1.2 注意事项

  1. 笔试平台熟悉度:熟悉常见的笔试平台(如牛客网、赛码)可以帮助你更好地应对笔试中的输入输出要求。
  2. 自定义测试用例的重要性:有些笔试,会让咱们自己设计测试用例, 平时在练习的时候也要注意一下。在编写算法时,自定义测试用例可以帮助你验证代码的正确性。设计测试用例时,应考虑不同的输入场景和边界条件。
  3. 面试中的输入输出和测试用例要求:面试官可能会要求你在编写代码后自定义测试用例以验证代码的正确性,因此掌握输入输出处理技巧非常重要。

面试手撕代码的几种形式:
1.平台类
去面试官给定的平台上去面试,上面可以编写代码,调试和运行,这些平台有的写好了函数框架,有的是白板,需要自己写全部内容
2.自己的IDE
面试官要求候选人打开自己的ide,并共享桌面进行编写,这种肯定是要自己写全输入输出了
3.要求补齐测试用例
有些面试官,比如微软的面试官,可能会让你写完代码后,自己设计尽可能全面的测试用例,对你编写的代码进行测试。
————————来源:牛客网

2. C++常用的输入输出方法

2.1 输入

在C++语言中,标准输入操作需要包含头文件<iostream>
以下是C++中常用的几种标准输入方法,以及它们的特点和使用方式。下面这列了几个常用的,熟练掌握下面这几个就够了,如果学有余力可以去官方文档查看更多的输入输出函数。

2.1.1 cin

cin是C++中最常用的标准输入流对象。它的基本原理是通过一个缓冲区(Buffer)来存储键盘输入的数据,cin则从这个缓冲区中读取数据。
注意事项:

  1. cin可以连续从键盘读取多个数据。
  2. cin以空格、Tab键和换行符作为输入的分隔符
  3. cin从第一个非空白字符开始读取,直到遇到分隔符为止。

示例代码:

  • 单独读入一个数据:
int num;
cin >> num;
cout << num << endl;  // 输出读入的整数num

应用场景: 当题目要求输入一个整数并处理时,这是最基本的用法。

  • 批量读入多个数据:
vector<int> nums(5);
for(int i = 0; i < nums.size(); i++) {
    cin >> nums[i];
}

// 输出读入的数组
for(int i = 0; i < nums.size(); i++) {
    cout << nums[i] << " ";
}

应用场景: 常用于读取一组整数,比如数组或序列。

  • 处理多组输入:
int a,b 
while(cin>>a>>b){
    cout<<a+b<<endl;
}

应用场景: 处理多组输入,直到文件结束(EOF)。这种用法常见于需要连续处理多组测试数据的题目。

注意事项
  • cin 会忽略输入中的空格、Tab 和换行符。
  • 当遇到空格、Tab 或换行符时,cin 会结束当前变量的读取,并开始读取下一个变量。
2.1.2 getline()

在某些情况下,cin无法满足需求。例如,当我们需要读取包含空格的字符串时,cin会在遇到空格时停止读取,读不全整个字符串。此时,可以使用getline()函数来解决问题。
注意事项:

  1. 使用getline()函数时,需要包含头文件<string>
  2. getline()函数会读取整行内容,包括空格字符,直到遇到换行符为止。

常用场景及示例

  1. 读取整行字符串:
string s;
getline(cin, s);
cout << s << endl;
  • 应用场景: 处理包含空格的整行输入,比如处理多词的句子或描述性文本。
  1. 读取整行并分割处理:
string line;
getline(cin, line);
stringstream ss(line);
int num;
while (ss >> num) {
    cout << num << endl;
}
  • 应用场景: 处理复杂输入格式,如需要按空格分割的整行数据,并将其转换为数字。
注意事项
  • getline 会读取换行符之前的所有字符,但不会包括换行符本身。
  • getlinecin 混合使用时,可能会出现换行符残留问题。通常建议在使用 getline 前使用 cin.ignore() 以清除换行符。
2.1.3 getchar()

getchar()函数用于从缓冲区中读取一个字符,常用于判断是否遇到换行符等场景。比如:while(getchar()!='\n')
常用场景及示例

  1. 读取单个字符:
char ch;
ch = getchar();
cout << ch << endl;
  • 应用场景: 处理逐字符输入,比如逐个处理某些符号、字母或控制字符。
  1. 读取直到换行符:
char ch;
while ((ch = getchar()) != '\n') {
    cout << ch;
}
cout << endl;
  • 应用场景: 在逐字符处理输入时,直到遇到换行符为止。常用于需要逐字符解析输入的情况。
注意事项
  • getchar 读取的是缓冲区中的下一个字符,这意味着它包括空格、Tab、换行符等所有字符。
  • 如果需要逐字符处理输入,getchar 是一个很好的选择,尤其是在需要精确控制输入处理时。

2.2 输出

在C++中,标准输出操作同样需要包含头文件<iostream>。常用的输出函数是cout,其基本功能是将数据输出到控制台。
需要特别注意的是,cout在输出endl对象时,不仅会换行,还会刷新输出缓冲区,这与\n略有不同。
示例代码:

string s = "hello, Irray~";
// 观察以下输出的区别
cout << "hello, Irray~";
cout << s << endl;  // 输出后换行

3. 案例

在刷算法题时,掌握不同类型输入的处理方式是非常重要的。根据输入格式的不同,我们可以采用不同的方法来读取数据。以下我们将详细介绍几种常见输入类型的处理方法,并附上相应的代码示例。

3.1 一维数组输入

一维数组是算法题中最基础的输入类型之一,通常每个元素是一个整数或字符。根据题目要求,输入的数组可以是固定长度或不固定长度。

3.1.1 固定长度的一维数组

输入格式:

3
    1 2 3

3 1 2 3

解析:
在第一种格式中,第一行的3表示数组的长度,第二行是用空格隔开的整数。在第二种格式中,第一行包含数组的长度3以及数组元素。对于这两种情况,我们都可以使用cin来逐一读取数据。
代码示例:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n; // 读取数组大小,例如3
    vector<int> nums(n); // 创建大小为n的vector<int>
    
    // 逐一读取数组元素
    for(int i = 0; i < n; i++) {
        cin >> nums[i];
    }
    
    // 输出读取的数组,验证输入是否正确
    for(int i = 0; i < nums.size(); i++) {
        cout << nums[i] << " ";
    }
    cout << endl;

    return 0;
}

3.1.2 不固定长度的一维数组

输入格式:

1 2 3 4

解析:
在这种情况下,输入的数据是多个用空格分隔的整数,没有明确给出数组的长度。我们可以使用while循环结合cingetchar来处理。
代码示例:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> nums;
    int num;
    
    // 使用while循环逐一读取整数,直到遇到换行符结束
    while(cin >> num) {
        nums.push_back(num);
        if(getchar() == '\n') {
            break;
        }
    }
    
    // 输出读取的数组,验证输入是否正确
    for(int i = 0; i < nums.size(); i++) {
        cout << nums[i] << " ";
    }
    cout << endl;

    return 0;
}

3.2 二维数组输入

在一些算法题中,我们需要处理二维数组的输入。常见的输入形式包括常规模式和每行数据用逗号分隔的模式。

3.2.1 常规模式的二维数组输入

输入格式:

2 3
1 2 3
1 2 3

解析:
第一行的2表示二维数组的行数,3表示列数。接下来两行数据是二维数组的内容。我们可以使用嵌套的for循环和cin来逐行读取数据。
代码示例:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int m, n;
    cin >> m >> n; // 读取行数和列数

    vector<vector<int>> matrix(m, vector<int>(n));
    //这里 二维数组的表达方式一定要掌握



    // 逐行逐列读取二维数组元素
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }

    // 输出读取的二维数组,验证输入是否正确
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

3.2.2 每行数据用逗号分隔的二维数组输入

输入格式:

2 3
1,2,3
1,2,3

解析:
同样的,第一行的23分别代表行数和列数。不同的是,接下来的每行数据是用逗号分隔的字符串。我们可以使用getline读取每行字符串,然后通过处理字符串来分隔出每个整数。输入的时候有逗号作为分隔,但是我们希望存到二维数组里面的只有数字。
代码示例:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    int m, n;
    cin >> m >> n;
    //cin.ignore(); // 忽略换行符,以便后续getline读取
//当你使用 cin 读取 m 和 n 后,输入流中还会残留一个换行符(\n)。如果你直接调用 getline(),
//它会立即读取到这个换行符,并将其视为一个空行。这就会导致 getline() 读取到的内容为空字符串,
//而不是你期望的那一整行输入数据。

//cin.ignore() 的作用就是忽略掉这个换行符(或其他指定的字符),从而让后续的 getline() 能正确读取你需要的那一行数据。

    getchar();
//getchar() 会从输入流中读取下一个字符并将其丢弃,因此可以用来忽略掉 cin 读取 m 和 n 后残留的换行符。
    
    vector<vector<int>> matrix(m);
//仅初始化了 m 行,但每一行都是一个空的 vector,需要后续手动添加元素。
//vector<vector<int>> matrix(m, vector<int>(n));也可以,因为已经给出m,n.
    

    // 逐行读取并处理字符串
    for(int i = 0; i < m; i++) {
        string s;
        getline(cin, s);//读取一行放入到字符串s中

        
        vector<int> vec;//建立存放整数的一维数组
        int p = 0;		//索引p,用于表示当前数字的结束位置
        for(int q = 0; q < s.size(); q++) {
            p = q;
            while(p < s.size() && s[p] != ',') {
                p++;
            }
// 2 , 3 , 4
// 0 1 2 3 4
            string temp = s.substr(q, p - q);
            //提取从位置q到p的子字符串,这部分字符串是一个数字。
            vec.push_back(stoi(temp)); 
            // 将字符串转为整数并存入vector
            q = p; // 更新索引位置
        }
        
        matrix[i] = vec; // 将处理后的vector存入matrix
    }

    // 输出读取的二维数组,验证输入是否正确
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < matrix[i].size(); j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

3.3 字符串输入

字符串在算法题中也非常常见,以下介绍几种常见的字符串输入情况及其处理方式。

3.3.1 单字符串输入

输入格式:

abc

解析:
对于单个字符串的输入,我们直接使用cin即可读取。
代码示例:

#include <iostream>
using namespace std;

int main() {
    string s;
    cin >> s; // 读取单个字符串

    // 输出读取的字符串,验证输入是否正确
    cout << s << endl;

    return 0;
}

3.3.2 多字符串输入(固定个数)

输入格式:

3 abc ab a

解析:
第一行的3表示接下来有三个字符串,每个字符串用空格隔开。我们可以使用for循环结合cin来逐一读取字符串。
代码示例:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n; // 读取字符串数量
    vector<string> strings(n);

    // 逐一读取字符串
    for(int i = 0; i < n; i++) {
        cin >> strings[i];
    }

    // 输出读取的字符串,验证输入是否正确
    for(int i = 0; i < strings.size(); i++) {
        cout << strings[i] << " ";
    }
    cout << endl;

    return 0;
}

3.3.3 多字符串输入(不固定个数)

输入格式:

abc ab a d

解析:
当输入为多个用空格隔开的字符串且没有给出数量时,我们可以使用while循环结合cingetchar来逐一读取,直到遇到换行符结束输入。
代码示例:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<string> strings;
    string str;

    // 使用while循环逐一读取字符串,直到遇到换行符结束
    while(cin >> str) {
//cin成功读取返回true,否则false;
        strings.push_back(str);
        if(getchar() == '\n') {
            break;
        }
    }

    // 输出读取的字符串,验证输入是否正确
    for(int i = 0; i < strings.size(); i++) {
        cout << strings[i] << " ";
    }
    cout << endl;

    return 0;
}

3.3.4 字符串转整数数组

输入格式:

11,22,3,4

解析:
输入为一个完整字符串,字符串内容为用逗号隔开的整数。我们可以先读取整个字符串,然后根据逗号分隔出每个整数,并将其存入vector<int>中。
代码示例:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    vector<int> vec;
    string s;

    // 读取整行字符串
    getline(cin, s);

    // 按照逗号分隔字符串并转换为整数
    int p =0;
    for(int q = 0; q < s.size(); q++) {
        p = q;
        while(p < s.size() && s[p] != ',') {
            p++;
        }
        string temp = s.substr(q, p - q); // 提取子字符串
        vec.push_back(stoi(temp)); // 将子字符串转换为整数并存入vector
        q = p; // 更新索引位置,跳过逗号
    }

    // 输出读取的整数数组,验证输入是否正确
    for(int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }
    cout << endl;

    return 0;
}

4. ACM模式练习平台

4.1 练习平台推荐

以下是一些推荐的练习平台:

  • LeetCode:提供多种类型的编程问题,适合练习各种算法和数据结构。
  • Codeforces:有丰富的编程比赛题目和讨论区,可以提升算法能力和解题速度。
  • AtCoder:提供编程竞赛题目,适合训练自己的算法能力。
  • 牛客网:有许多笔试题和面试题,适合进行ACM模式训练。重点推荐此题单:题目来自:牛客竞赛链接

image.png

4.2 实战平台案例

题目:给定一个整数数组,求数组中的每个元素的平方,并按升序输出。
输入:

5
1 2 3 4 5

输出:

1 4 9 16 25

解决方案:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;  // 读入数组大小
    vector<int> nums(n);
    for(int i = 0; i < n; i++) {
        cin >> nums[i];  // 读入数组元素
    }
    for(int i = 0; i < n; i++) {
        nums[i] = nums[i] * nums[i];  // 计算平方
    }
    sort(nums.begin(), nums.end());  // 排序
    for(int i = 0; i < n; i++) {
        cout << nums[i] << " ";  // 输出结果
    }
    cout << endl;
    return 0;
}

5. 常见数据结构定义

在ACM模式中,链表、二叉树这些数据结构的定义也需要自己去定义,接下来就给出二者的定义、输入和输出。这里就直接给出代码了,想必大伙对数据结构都是了如指掌的。

5.1 链表

链表是一种基本的数据结构,常用于存储和操作数据。以下是一个简单的链表的输入和输出示例:

#include <iostream>
using namespace std;

// 定义链表节点的结构
struct ListNode {
    int val;          // 节点的值
    ListNode* next;   // 指向下一个节点的指针
    // 构造函数,初始化节点的值和指针
    ListNode(int x) 
    : val(x)
    ,next(nullptr) 
    {}
};

int main() {
    ListNode* head = nullptr;  // 链表的头指针,初始化为空
    ListNode* tail = nullptr;  // 链表的尾指针,初始化为空
    int n;

    // 从输入中读取数据,直到遇到换行符
    while (cin >> n) {
        ListNode* newNode = new ListNode(n);  // 创建新的链表节点
        if (!head) {
            // 如果链表为空,则新的节点是头节点
            head = newNode;
            tail = head;
        } else {
            // 否则,将新节点添加到链表末尾
            tail->next = newNode;
            tail = newNode;
        }
        if (getchar() == '\n') {
            // 如果输入流中遇到换行符,则停止读取
            break;
        }
    }

    // 输出链表中的所有节点值
    ListNode* current = head;  // 从头节点开始遍历
    while (current) {
        cout << current->val << " ";  // 输出当前节点的值
        current = current->next;      // 移动到下一个节点
    }
    cout << endl;

    // 清理链表,释放内存
    while (head) {
        ListNode* temp = head;  // 保存当前节点的指针
        head = head->next;     // 移动到下一个节点
        delete temp;           // 删除当前节点,释放内存
    }

    return 0;
}

5.2 二叉树

二叉树是一种常见的数据结构,用于组织和存储数据。以下是一个简单的二叉树的输入和层序遍历输出示例:

#include <iostream>
#include <queue>
using namespace std;

// 定义二叉树节点的结构
struct TreeNode {
    int val;          // 节点的值
    TreeNode* left;   // 指向左子节点的指针
    TreeNode* right;  // 指向右子节点的指针
    // 构造函数,初始化节点的值和子节点指针
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

int main() {
    int n;
    cin >> n;  // 读取树的节点个数
    if (n == 0) {
        cout << endl;  // 如果节点个数为0,直接输出换行并返回
        return 0;
    }

    vector<TreeNode*> nodes(n, nullptr);  // 创建一个保存所有节点的向量
    for (int i = 0; i < n; i++) {
        int value;
        cin >> value;  // 读取节点的值
        nodes[i] = new TreeNode(value);  // 创建新的节点并存储到向量中
    }

    // 连接树的节点,构建二叉树
    for (int i = 0; i < n; i++) {
        if (2 * i + 1 < n) nodes[i]->left = nodes[2 * i + 1];   // 左子节点
        if (2 * i + 2 < n) nodes[i]->right = nodes[2 * i + 2];  // 右子节点
    }

    // 层序遍历输出
    queue<TreeNode*> q;   // 创建一个队列,用于层序遍历
    q.push(nodes[0]);    // 从根节点开始
    while (!q.empty()) {
        TreeNode* node = q.front();  // 获取队列中的第一个节点
        q.pop();  // 移除队列中的第一个节点
        cout << node->val << " ";  // 输出当前节点的值
        if (node->left) q.push(node->left);   // 将左子节点加入队列
        if (node->right) q.push(node->right); // 将右子节点加入队列
    }
    cout << endl;

    // 清理树,释放内存
    for (auto node : nodes) {
        delete node;  // 删除每个节点,释放内存
    }

    return 0;
}

在这里插入图片描述

  1. 📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
  2. 本人也很想知道这些错误,恳望读者批评指正!
  3. 我是:勇敢滴勇~感谢大家的支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习_19_方法引用及异常

文章目录 前言一、方法引用方法引用实例引用静态方法引用成员方法引用构造方法使用类名引用成员方法引用数组的构造方法综合练习 二、异常异常是什么异常的作用处理方案默认异常捕获异常 异常对象的常用方法抛出异常 总结 前言 博客仅记录个人学习进度和一些查缺补漏。 学习内…

使用ckplayer控制视频播放

目录 1、加载视频流 1.1、html模块 1.2、js模块 2、其他功能 2.1、缩放窗口 2.2、旋转窗口 2.3、卸载播放器 2.4、监听播放时间进度 2.5、定位播放 3、初始化属性说明 4、使用功能一览 ckplayer是一款在网页上播放视频的软件&#xff0c;基于javascript和css&#xf…

黑神话:悟空!爆了很多猴头! 借力,借智,借势(深度好文)——早读(逆天打工人爬取热门微信文章解读)

黑神话&#xff1a;悟空 怎么这么多猴头呢&#xff1f; 引言Python 代码第一篇 洞见 借力&#xff0c;借智&#xff0c;借势&#xff08;深度好文&#xff09;第二篇 股市风云结尾 引言 天哪 我昨天忘记发了 原因有二 一是比较忙 大家明白那种 3000块工资干2W的活的感觉吧 一开…

PyTorch使用------模型的定义和保存方法(带你讯速掌握构建线性回归,保存模型的方法!!!)

&#x1f43b; PyTorch使用合集&#xff1a; PyTorch使用------张量的创建和数值计算-CSDN博客 PyTorch使用------张量的类型转换&#xff0c;拼接操作&#xff0c;索引操作&#xff0c;形状操作-CSDN博客 目录 &#x1f354; 模型定义方法 &#x1f498; 使用PyTorch构建线性…

RISC-V vector(1) --- vector的引入与register说明

Vector相较于SIMD的优势 这两种实现方案&#xff0c;都是为了实现数据级并行性&#xff08;存在大量的数据可供程序同时计算&#xff09;&#xff1b; SIMD&#xff08;Single Instruction Multiple Data&#xff09; SIMD是将数据宽度和操作类型&#xff0c;都放在了指令中&a…

网络初识部分

1.网络 单机时代-局域网时代-广域网时代-移动互联网时代 局域网时代&#xff1a;通过路由器把几个电脑连接起来。 广域网时代&#xff1a;把更多的局域网连接到一起&#xff0c;构成的网络更庞大&#xff0c;可能已经覆盖了一个城市/国家/全世界。 2.什么是路由器&#xff…

关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)

一、设置芯片为RS422模式 SP526 包含高度集成的串行收发器。SP526 提供 RS-232 &#xff08;V.28&#xff09;、RS-423 &#xff08;V.10&#xff09;、RS-422 &#xff08;V.11&#xff09; 和 RS-485 的硬件接口模式。接口模式选择通过两个控制引脚D0、D1完成。 我们将D0接…

【简历】25届青岛某一本JAVA简历:中厂不要强调算法,面试官听不懂

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 今天我们要看的是一位来自25届青岛某一本硕士同学的Java简历。 依旧是先判断自己要投什么层次的厂&#xff0c;也就是我们校招第一法则…

Netty04-优化与源码

四. 优化与源码 1. 优化 1.1 扩展序列化算法 序列化&#xff0c;反序列化主要用在消息正文的转换上 序列化时&#xff0c;需要将 Java 对象变为要传输的数据&#xff08;可以是 byte[]&#xff0c;或 json 等&#xff0c;最终都需要变成 byte[]&#xff09;反序列化时&…

SQL进阶技巧:如何按任意时段分析时间区间问题? | 区间重叠问题应用

目录 0 场景描述 1 数据准备 2 问题分析 方法1:分情况讨论,找出重叠区间 方法2:暴力美学法。按区间展开成日期明细表 3 小结 0 场景描述 现有用户还款计划表 user_repayment ,该表内的一条数据,表示用户在指定日期区间内 [date_start, date_end] ,每天还款 repay…

成为顶尖1%前端开发者的10项必备技能

从你可能已经熟悉的前端基础开始&#xff1b;然后进入关键技能&#xff0c;如使用浏览器开发工具和利用AI快速编码。包括99%的开发者忽视的宝贵通用技能。 从你可能已经熟悉的前端基础开始&#xff1b;然后进入关键技能&#xff0c;如使用浏览器开发工具和利用AI快速编码。 包…

【youcans论文精读】KAN 2.0:面向科学的KAN网络

欢迎关注『youcans论文精读』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans论文精读】KAN 2.0&#xff1a;面向科学的KAN网络 1. KAN2.0 简介1.1 KAN 2.0 论文发布1.2 KAN2.0 的新特点&#xff1a;1.3 KAN 回顾 2. MultiKAN&#xff1a;用乘法增强 KAN 网络的表达能力…

足底筋膜炎专用药

足底筋膜炎专用药“古顺*敷堂筋膜*贴”通过其独特的药效和用法&#xff0c;能够针对足底筋膜炎进行有效治疗&#xff0c;缓解患者疼痛和不适感&#xff0c;促进炎症消退和肌肉恢复。长时间站立、行走或进行高强度的跑步、跳跃等活动&#xff0c;会使足底筋膜受到持续的牵拉和压…

MEMS 传感器 4GDTU 说明书

本系统经过精心设计&#xff0c;可无缝对接三石峰的振动管理系统平台。通过该平台&#xff0c;用户可直观查看传感器数据、分析振动趋势、预警潜在故障&#xff0c;并依据分析结果制定针对性的维护策略&#xff0c;从而有效提升设备运行的可靠性与安全性。 本产品广泛应用于工…

日常开发规范

日常开发规范 一.git提交规范 开发代码之前&#xff0c;需有管理员通过系统新建功能分支&#xff0c;如feature/one&#xff0c; 此时开发人员方可拉取feature/one到本地进行开发&#xff0c; 开发人员在本地环境测试稳定后&#xff0c;方可由管理员通过系统发布到开发环境…

宠物空气净化器不是智商税!希喂、352宠物空气净化器真实测评

前端时间我出差了&#xff0c;把小猫寄养在朋友家里&#xff0c;回来后去接它们&#xff0c;结果到朋友家差点没认出来...碰上换毛季猫咪疯狂脱毛&#xff0c;朋友没有及时清理&#xff0c;就全堆在身上了&#xff0c;简直是胖若两猫。到家后&#xff0c;我连忙用梳子把它身上的…

Wi-Fi发射功率简介

目录 一、概念 1.1 射频发射与组合功率 1.2 天线增益 1.3 信道影响 二、常用单位及转换 2.1 dB 与 dBm 2.2 dBi 与 dBd 三、发射功率 3.1 发射功率调节 3.1.1 TPC 3.2 国家码与信道功率 一、概念 ① 和 ⑦ 表示射频发送端处的功率,单位是 dBm。其中 ① 表示AP端的…

《通义千问AI落地—下》:WebSocket详解

一、前言 文本源自 微博客 且已获授权,请尊重版权。 《通义千问AI落地——下篇》如约而至。Websocket在这一类引用中,起到前后端通信的作用。因此,本文将介绍websocket在这类应用场景下的配置、使用、注意事项以及ws连接升级为wss连接等;如下图,本站已经使用了wss连接…

ssrf,csrf漏洞复现

印象深刻的csrf利用&#xff1a; 在phpwind下&#xff1a;漏洞点&#xff08;但是都是在后台的漏洞&#xff09; 代码追&#xff1a; task到unserialize&#xff0c;然后重写PwDelayRun的构造函数&#xff0c;给callback和args赋值&#xff0c;然后当程序执行结束&#xff0c…

请问lammps怎么做两种金属连接的原子浓度分布图??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…