【携程笔试题汇总】2024-03-28-携程春招笔试题-三语言题解(CPP/Python/Java)

news2024/9/21 16:34:46

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员

✨ 本系列打算持续跟新携程近期的春秋招笔试题汇总~

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

文章目录

    • 01.K小姐的回文游戏
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 02.K小姐的花园修剪
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 03.K小姐的农场优化问题
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 04.K小姐的蛋糕订单
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 写在最后
    • 📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取~

01.K小姐的回文游戏

问题描述

K小姐想玩一个有趣的回文游戏。给定一个正整数 n n n,她希望你能输出一个由 n n n 个 “you” 组成的字符串,其中第一个 “you” 正序输出,第二个倒序输出,第三个再正序,以此类推。你能帮帮她吗?

输入格式

输入只有一行,包含一个正整数 n n n,表示需要输出的 “you” 的个数。

输出格式

输出一个字符串,表示由 n n n 个 “you” 组成的字符串,奇数位置的 “you” 正序输出,偶数位置的 “you” 倒序输出。

样例输入

5

样例输出

youuoyyouuoyyou

数据范围

1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105

题解

这是一个简单的字符串构造问题。我们可以先定义两个字符串 “you” 和 “uoy”,然后根据 n n n 的奇偶性,交替输出这两个字符串即可。

具体步骤如下:

  1. 定义两个字符串 s 1 s_1 s1 s 2 s_2 s2,分别表示正序的 “you” 和倒序的 “uoy”。
  2. 循环 n n n 次,如果当前循环变量 i i i 为偶数,就输出 s 1 s_1 s1,否则输出 s 2 s_2 s2
  3. 最后输出构造好的字符串即可。

时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1)

参考代码

  • Python
s1 = "you"
s2 = "uoy"
n = int(input())
res = ""
for i in range(n):
    if i % 2 == 0:
        res += s1
    else:
        res += s2
print(res)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String s1 = "you", s2 = "uoy";
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < n; i++) {
            if (i % 2 == 0) {
                res.append(s1);
            } else {
                res.append(s2);
            }
        }
        System.out.println(res);
    }
}
  • Cpp
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    string s1 = "you", s2 = "uoy", res = "";
    for (int i = 0; i < n; i++) {
        if (i % 2 == 0) {
            res += s1;
        } else {
            res += s2;
        }
    }
    cout << res << endl;
    return 0;
}

02.K小姐的花园修剪

问题描述

K小姐有一个 n × m n \times m n×m 的花园,每个位置上都种植了一株植物。然而,有些植物长得太茂盛了,需要修剪。K小姐可以选择一个 1 × 2 1 \times 2 1×2 的区域(即连续的两株植物),将它们修剪整齐。现在,K小姐想知道,最少需要多少次修剪,才能让整个花园看起来整齐有序呢?

花园中的每一株植物可以用 0 或 1 来表示,0 表示植物长得刚刚好,不需要修剪,1 表示植物长得太茂盛,需要修剪。

输入格式

第一行包含两个正整数 n n n m m m,表示花园的行数和列数,中间用空格隔开。

接下来 n n n 行,每行包含 m m m 个字符,表示花园中植物的状态,0 表示不需要修剪,1 表示需要修剪。

输出格式

输出一个整数,表示最少需要的修剪次数。

样例输入

2 4
1010
1000

样例输出

4

数据范围

2 ≤ n , m ≤ 1000 2 \le n, m \le 1000 2n,m1000

题解

这道题可以用贪心的思路来解决。我们可以遍历整个花园,每次找到一个需要修剪的植物,然后将它和它右边的一株植物一起修剪(如果右边还有植物的话)。这样,我们可以保证每次修剪都是最优的选择,因为如果我们选择修剪一株不需要修剪的植物,那么总的修剪次数只会更多。

具体实现时,我们可以用一个双重循环来遍历花园,每次找到一个为 1 的位置,就将它修剪为 0,并且将它右边的位置也修剪为 0(如果右边的位置还在花园内),同时将修剪次数加 1。最后输出总的修剪次数即可。

时间复杂度为 O ( n m ) O(nm) O(nm),空间复杂度为 O ( n m ) O(nm) O(nm)

参考代码

  • Python
n, m = map(int, input().split())
garden = [input() for _ in range(n)]

cnt = 0
for i in range(n):
    for j in range(m):
        if garden[i][j] == '1':
            cnt += 1
            if j + 1 < m:
                garden[i] = garden[i][:j+1] + '0' + garden[i][j+2:]
            else:
                garden[i] = garden[i][:j] + '0'

print(cnt)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        char[][] garden = new char[n][m];
        for (int i = 0; i < n; i++) {
            garden[i] = sc.next().toCharArray();
        }

        int cnt = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (garden[i][j] == '1') {
                    cnt++;
                    if (j + 1 < m) {
                        garden[i][j + 1] = '0';
                    }
                }
            }
        }

        System.out.println(cnt);
    }
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    vector<string> garden(n);
    for (int i = 0; i < n; i++) {
        cin >> garden[i];
    }

    int cnt = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (garden[i][j] == '1') {
                cnt++;
                if (j + 1 < m) {
                    garden[i][j + 1] = '0';
                }
            }
        }
    }

    cout << cnt << endl;
    return 0;
}

03.K小姐的农场优化问题

问题描述

K小姐拥有一个农场,农场中种植了一排果树,共有 n n n 棵。每棵果树都有一个对应的收益值 a i a_i ai,可正可负。

现在,K小姐最多可以进行一次优化操作:选择一个由偶数棵果树组成的连续区间,将这个区间内所有果树的收益都减半。

请你帮助K小姐进行最佳决策,使得优化后整个果园的总收益最大。

输入格式

第一行包含一个正整数 n n n,表示果树的数量。

第二行包含 n n n 个整数 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an,分别表示每棵果树的收益值。

输出格式

输出一个整数,表示优化后果园的最大总收益。

样例输入

5
8 -4 2 -6 -5

样例输出

-1

数据范围

  • 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105
  • − 1 0 9 ≤ a i ≤ 1 0 9 -10^9 \leq a_i \leq 10^9 109ai109

题解

本题可以使用区间求和的思想来解决。我们可以枚举每一个由偶数棵果树组成的连续区间,计算该区间内果树收益的总和。如果该区间收益总和小于 0 0 0,那么我们就可以考虑将该区间内所有果树的收益都减半,这样可以提高整个果园的总收益。

具体步骤如下:

  1. 初始化答案为原始果园的总收益。
  2. 从左到右遍历每棵果树,找到每一个由偶数棵果树组成的连续区间。
  3. 对于每个偶数棵果树组成的连续区间,计算该区间内果树收益的总和。
  4. 如果该区间收益总和小于 0 0 0,则尝试将该区间内所有果树的收益都减半,更新答案为减半后的果园总收益与当前答案的较大值。
  5. 继续遍历下一个偶数棵果树组成的连续区间,重复步骤 3-4。
  6. 返回最终得到的最大总收益即为答案。

时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1)

参考代码

  • Python
def maxProfit(n, profits):
    total = sum(profits)
    left, right = 0, 0
    ans = total

    while left < n:
        while left < n and profits[left] % 2 != 0:
            left += 1
        
        if left < n:
            right = left
            while right < n and profits[right] % 2 == 0:
                right += 1
            
            currSum = 0
            while left < right:
                currSum += profits[left]
                if currSum < 0:
                    ans = max(ans, total - currSum // 2)
                else:
                    currSum = 0
                left += 1
    
    return ans

n = int(input())
profits = list(map(int, input().split()))
print(maxProfit(n, profits))
  • Java
import java.util.Scanner;

public class Solution {
    public static int maxProfit(int n, int[] profits) {
        int total = 0;
        for (int profit : profits) {
            total += profit;
        }
        int left = 0, right = 0;
        int ans = total;

        while (left < n) {
            while (left < n && profits[left] % 2 != 0) {
                left++;
            }

            if (left < n) {
                right = left;
                while (right < n && profits[right] % 2 == 0) {
                    right++;
                }

                int currSum = 0;
                while (left < right) {
                    currSum += profits[left];
                    if (currSum < 0) {
                        ans = Math.max(ans, total - currSum / 2);
                    } else {
                        currSum = 0;
                    }
                    left++;
                }
            }
        }

        return ans;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] profits = new int[n];
        for (int i = 0; i < n; i++) {
            profits[i] = scanner.nextInt();
        }
        System.out.println(maxProfit(n, profits));
    }
}
  • Cpp
#include <iostream>
#include <vector>
using namespace std;

int maxProfit(int n, const vector<int>& profits) {
    int total = 0;
    for (int profit : profits) {
        total += profit;
    }
    int left = 0, right = 0;
    int ans = total;

    while (left < n) {
        while (left < n && profits[left] % 2 != 0) {
            left++;
        }

        if (left < n) {
            right = left;
            while (right < n && profits[right] % 2 == 0) {
                right++;
            }

            int currSum = 0;
            while (left < right) {
                currSum += profits[left];
                if (currSum < 0) {
                    ans = max(ans, total - currSum / 2);
                } else {
                    currSum = 0;
                }
                left++;
            }
        }
    }

    return ans;
}

int main() {
    int n;
    cin >> n;
    vector<int> profits(n);
    for (int i = 0; i < n; i++) {
        cin >> profits[i];
    }
    cout << maxProfit(n, profits) << endl;
    return 0;
}

04.K小姐的蛋糕订单

问题描述

K小姐是一位蛋糕店的老板,她最近收到了 n n n 个蛋糕订单。每个订单需要制作一定数量的蛋糕,这些数量分别记录在数组 a a a 中。由于每个蛋糕都有多种装饰方式,K小姐想知道,对于每个订单,有多少种不同的装饰方式。为了方便计算,她希望你能帮她求出所有订单装饰方式数量的乘积。但是这个乘积可能会非常大,所以请对 1 0 9 + 7 10^9+7 109+7 取模后再输出答案。

输入格式

第一行输入一个正整数 n n n,表示订单的数量。

第二行输入 n n n 个正整数 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an,表示每个订单需要制作的蛋糕数量,数与数之间用空格隔开。

输出格式

输出一个整数,表示所有订单装饰方式数量的乘积对 1 0 9 + 7 10^9+7 109+7 取模后的结果。

样例输入

3
1 2 3

样例输出

12

数据范围

1 ≤ n ≤ 2 × 1 0 5 1 \le n \le 2 \times 10^5 1n2×105
1 ≤ a i ≤ 1 0 6 1 \le a_i \le 10^6 1ai106

题解

本题可以使用数论中的莫比乌斯反演和欧拉筛法来解决。

首先,我们可以知道,对于一个数 x x x,它的阶乘 x ! x! x! 中质因子 p p p 的次数为 ⌊ x p ⌋ + ⌊ x p 2 ⌋ + ⌊ x p 3 ⌋ + ⋯ \lfloor \frac{x}{p} \rfloor + \lfloor \frac{x}{p^2} \rfloor + \lfloor \frac{x}{p^3} \rfloor + \cdots px+p2x+p3x+

假设数组 a a a 中所有数的乘积为 S S S,那么 S S S 的因子个数就等于 S S S 中每个质因子的次数加 1 1 1 的乘积。而 S S S 中每个质因子 p p p 的次数等于 ∑ i = 1 n ( ⌊ a i p ⌋ + ⌊ a i p 2 ⌋ + ⌊ a i p 3 ⌋ + ⋯   ) \sum_{i=1}^n (\lfloor \frac{a_i}{p} \rfloor + \lfloor \frac{a_i}{p^2} \rfloor + \lfloor \frac{a_i}{p^3} \rfloor + \cdots) i=1n(⌊pai+p2ai+p3ai+)

我们可以使用莫比乌斯反演来计算每个质因子的次数。设 f ( n ) = ∑ i = 1 n ⌊ a i n ⌋ f(n) = \sum_{i=1}^n \lfloor \frac{a_i}{n} \rfloor f(n)=i=1nnai,那么 S S S 中质因子 p p p 的次数就等于 ∑ i = 1 ∞ f ( p i ) \sum_{i=1}^{\infty} f(p^i) i=1f(pi)。根据莫比乌斯反演, f ( n ) = ∑ d ∣ n μ ( d ) g ( n d ) f(n) = \sum_{d|n} \mu(d) g(\frac{n}{d}) f(n)=dnμ(d)g(dn),其中 g ( n ) = ∑ i = 1 n [ a i = n ] g(n) = \sum_{i=1}^n [a_i = n] g(n)=i=1n[ai=n] μ \mu μ 为莫比乌斯函数。

因此,我们可以先用欧拉筛法预处理出每个数的莫比乌斯函数值,然后计算出 g g g 数组,再利用莫比乌斯反演计算出每个质因子的次数,最后把所有质因子的次数加 1 1 1 后相乘即可得到答案。

时间复杂度为 O ( n + ∑ i = 1 n a i ) O(n + \sum_{i=1}^n a_i) O(n+i=1nai),空间复杂度为 O ( n + max ⁡ ( a i ) ) O(n + \max(a_i)) O(n+max(ai))

参考代码

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

const int MOD = 1e9 + 7;
const int N = 1e6 + 5;

int mu[N];
vector<int> prime;
bool vis[N];
int f[N];
int g[N];

void init() {
    mu[1] = 1;
    for (int i = 2; i < N; i++) {
        if (!vis[i]) {
            prime.push_back(i);
            mu[i] = -1;
        }
        for (int p : prime) {
            if (i * p >= N) {
                break;
            }
            vis[i * p] = true;
            if (i % p == 0) {
                mu[i * p] = 0;
                break;
            }
            mu[i * p] = -mu[i];
        }
    }
}

void solve() {
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        g[x]++;
    }
    
    for (int i = 1; i < N; i++) {
        for (int j = i; j < N; j += i) {
            f[i] += g[j];
        }
    }
    
    long long res = 1;
    for (int i = 2; i < N; i++) {
        if (mu[i]) {
            long long cnt = 0;
            for (int j = i; j < N; j += i) {
                cnt += 1LL * mu[j / i] * f[j];
            }
            res = res * (cnt + 1) % MOD;
        }
    }
    
    cout << res << endl;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    init();
    solve();
    
    return 0;
}
  • Java
import java.io.*;
import java.util.*;

public class Main {
    static final int MOD = (int)1e9 + 7;
    static final int N = (int)1e6 + 5;
    
    static int[] mu = new int[N];
    static List<Integer> prime = new ArrayList<>();
    static boolean[] vis = new boolean[N];
    static int[] f = new int[N];
    static int[] g = new int[N];
    
    static void init() {
        mu[1] = 1;
        for (int i = 2; i < N; i++) {
            if (!vis[i]) {
                prime.add(i);
                mu[i] = -1;
            }
            for (int p : prime) {
                if (i * p >= N) {
                    break;
                }
                vis[i * p] = true;
                if (i % p == 0) {
                    mu[i * p] = 0;
                    break;
                }
                mu[i * p] = -mu[i];
            }
        }
    }
    
    static void solve() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(" ");
        
        for (String x : s) {
            g[Integer.parseInt(x)]++;
        }
        
        for (int i = 1; i < N; i++) {
            for (int j = i; j < N; j += i) {
                f[i] += g[j];
            }
        }
        
        long res = 1;
        for (int i = 2; i < N; i++) {
            if (mu[i] != 0) {
                long cnt = 0;
                for (int j = i; j < N; j += i) {
                    cnt += (long)mu[j / i] * f[j];
                }
                res = res * (cnt + 1) % MOD;
            }
        }
        
        System.out.println(res);
    }
    
    public static void main(String[] args) throws IOException {
        init();
        solve();
    }
}
  • Python
MOD = 10 ** 9 + 7
N = 10 ** 6 + 5

mu = [0] * N
prime = []
vis = [False] * N
f = [0] * N
g = [0] * N

def init():
    mu[1] = 1
    for i in range(2, N):
        if not vis[i]:
            prime.append(i)
            mu[i] = -1
        for p in prime:
            if i * p >= N:
                break
            vis[i * p] = True
            if i % p == 0:
                mu[i * p] = 0
                break
            mu[i * p] = -mu[i]

def solve():
    n = int(input())
    a = list(map(int, input().split()))
    
    for x in a:
        g[x] += 1
    
    for i in range(1, N):
        for j in range(i, N, i):
            f[i] += g[j]
    
    res = 1
    for i in range(2, N):
        if mu[i]:
            cnt = 0
            for j in range(i, N, i):
                cnt += mu[j // i] * f[j]
            res = res * (cnt + 1) % MOD
    
    print(res)

init()
solve()

写在最后

📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取~

在这里插入图片描述

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

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

相关文章

PYTHON初级笔记1

0、python&#xff1f; 简单的编程语言 python环境搭建&#xff1a; ①、开发环境&#xff1a;vscode、sublime、pycharm...... ②、运行环境&#xff1a;cpython解释器 python如何写代码&#xff1f; ①、在终端上的命令行上写&#xff0c;可以是我们cmd的中终端&#xff0c;…

【C语言】预处理常见知识详解(宏详解)

文章目录 1、预定义符号2、define2.1 define 定义常量2.2 define 定义宏 3、#和##3.1 **#**3.2 **##** 4、条件编译&#xff08;开关&#xff09; 1、预定义符号 在C语言中内置了一些预定义符号&#xff0c;可以直接使用&#xff0c;这些符号实在预处理期间处理的&#xff0c;…

【IntelliJ IDEA】运行测试报错解决方案(附图)

IntelliJ IDEA 版本 2023.3.4 (Ultimate Edition) 测试报错信息 命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行 解决方案 修改运行配置&#xff0c;里面如果没有缩短命令行&#xff0c;需要再修改选项里面勾选缩短命令行让其显示&#x…

深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;深入浅出的揭秘游标尺模式与迭代…

【机器学习】深入探讨基于实例的学习及K-最近邻算法

深入探讨基于实例的学习及K-最近邻算法 在机器学习的众多策略中&#xff0c;基于实例的学习方法因其简单性和高效性而备受关注。这种方法的核心理念在于利用已知的数据实例来预测新数据的标签或属性。本文将深入探讨其中的两个重要概念&#xff1a;最近邻算法和K-最近邻算法&a…

ArcGIS Pro横向水平图例

终于知道ArcGIS Pro怎么调横向图例了&#xff01; 简单的像0一样 旋转&#xff0c;左转右转随便转 然后调整图例项间距就可以了&#xff0c;参数太多就随便试&#xff0c;总有一款适合你&#xff01; 要调整长度&#xff0c;就调整图例块的大小。完美&#xff01; 好不容易…

CorelDRAW25.0.0.230最新2024版本Crack下载安装方法

CorelDRAW (CDR)是一款专业的平面设计软件。本软件是由加拿大Corel公司开发的一款功能强大的专业平面设计软件、矢量设计软件、矢量绘图软件。本矢量图形制作工具软件广泛应用于商标设计、标志制作、封面设计、CIS设计、产品包装设计、模型绘制、插画绘制、时装/服装设计、印刷…

STM32G473之flash存储结构汇总

STM32G4系列单片机&#xff0c;为32位的微控制器&#xff0c;理论上其内部寄存器地址最多支持4GB的命名及查找&#xff08;2的32次方&#xff0c;地址命名为0x00000000至0xFFFFFFFF&#xff09;。STM32官方对4GB的地址存储进行编号时&#xff0c;又分割成了8个block区域&#x…

Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174

Ryujinx/Ryujinx Stars: 26.1k License: MIT Ryujinx 是用 C# 编写的实验性任天堂 Switch 模拟器。 该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约 4050 个测试&#xff0c;其中超过 4000 个可以启动并进入游戏&#xff0c;其中大约 340…

新版Idea2023.3.5与lombok冲突、@Data失效

新版idea和lombok冲突&#xff0c;加上Data&#xff0c;其他地方get set也不报错&#xff0c;但是一运行就找不到get set方法。 但是直接使用Getter和Setter可以访问、应该是Data失效了。 解决方法&#xff1a; 看推上介绍是 lombok 与 idea 采集 get 、set 方法的时候所用的技…

yolov8逐步分解(1)--默认参数超参配置文件加载

本章节将介绍yolov8算法训练过程中的第一步&#xff1a;加载默认训练参数以及超参的配置文件default.yaml。 Yolov8 训练的入口文件为train.py&#xff0c;文件结构如下图所示&#xff1a; 1. 执行train函数&#xff0c;函数默认配置参数为cfgDEFAULT_CFG &#xff0c…

samba实现linux共享文件夹

一、samba安装 sudo apt install samba 二、配置Samba 编辑Samba配置文件sudo vi /etc/samba/smb.conf 在文件末尾添加以下内容&#xff0c;设置一个简单的共享目录&#xff08;替换path_to_share为实际的共享目录路径&#xff09;&#xff1a; [Share] path /path_to_sha…

【LeetCode热题100】124.二叉树的最大路径和(二叉树)

一.题目要求 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root …

DDos系列攻击原理与防御原理

七层防御体系 静态过滤 命中黑名单 对确定是攻击的流量直接加入黑名单&#xff08;源地址命中黑名单直接丢弃&#xff0c;缺乏机动性和扩展性&#xff09; 畸形报文过滤 畸形报文攻击 TCP包含多个标记位&#xff0c;排列组合有规律 • 现象&#xff1a;TCP标记位全为1 …

day72Html

常用标签&#xff1a; 分类&#xff1a; 块级标签&#xff1a;独立成行 行级标签&#xff1a;不独立成行&#xff0c;同一行可放多个行级标 注意网页显示时&#xff0c;忽略空白字符,(回车符&#xff0c;空格&#xff0c;tab制表符&#xff09; 一&#xff09;块级标签&#xf…

[数据结构]插入和希尔排序

一、插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴&#xff0c;但它的原理应该是最容易理解的了&#xff0c;因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排…

基于SpringBoot和Vue的在线视频教育平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的在线视频教育平台的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

Win10 搭建FTP存储服务器站点【超详细教程】

目录 第一步&#xff1a;打开控制面板>程序 第二步&#xff1a;win10左下角搜索IIS并打开 第三步&#xff1a;右键网站&#xff0c;选择添加FTP站点 第四步&#xff1a;添加FTP站点名称 第五步&#xff1a;添加IP地址和端口 第六步&#xff1a;身份验证与授权信息 第…

cleanmymac有必要买吗?cleanmymac免费使用

在使用mac时&#xff0c;小编遇到了运行内存不足、硬盘空间不足的情况。遇到这种情况&#xff0c;我们可以借助经典的电脑深度清理软件——CleanMyMac X&#xff0c;清理不常用的软件和系统垃圾&#xff0c;非常好用&#xff01;不过&#xff0c;有许多网友发现CleanMyMac X有免…

Ubuntu下使用vscode进行C/C++开发:进阶篇

在vscode上进行C/C++开发的进阶需求: 1) 编写及调试源码时,可进行断点调试、可跨文件及文件夹进行函数调用。 2) 可生成库及自动提取对应的头文件和库文件。 3) 可基于当前工程资源一键点击验证所提取的库文件的正确性。 4) 可结合find_package实现方便的调用。 对于第一…