华为OD机试 - 处理器问题(Python/JS/C/C++ 2024 E卷 200分)

news2024/11/19 18:26:00

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

某公司研发了一款高性能AI处理器。每台 物理设备Q 具备8颗AI处理器,编号分别为0,1,2,3,4,5,6,7。

编号0-3的处理器处于同一个链路内,编号4-7的处理器处于另外一个链路中,不同链路中的处理器不能通信。

如下图所示。现给定 服务器Q 可用的处理器编号数组array,以及任意的处理器申请数量num,找出符合下列亲和性调度原则的芯片组合。

如果不存在符合要求的组合,则返回空列表。

亲和性调度原则:

如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。

如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量为2个的为最佳,其次是剩余4个,最后是剩余3个。

如果申请处理器个数为4,则必须选择同一链路剩余可用的处理器数量为4个。

如果申请处理器个数为8,则申请节点所有8个处理器。

提示:

任各申请的处理器数量只能是1,2,4,8。

编号0-3的处理器处于一个链路,编号4-7的处理器处于另外一个链路。

处理器编号唯一,且不存在任何编号相同的处理器。

二、输入描述

输入包含可用的处理器编号数组 arrayQ,以及任务申请的处理器数量 num 两个部分。

第一行为array,第二行为num。例如:

[0, 1, 4, 5, 6, 7]
1

表示当前编号为0,1,4,5,6,7的处理器可用。任务申请1个处理器。

  • 0 <= array.length <= 8
  • 0 <= array[i] <= 7
  • num in [1, 2, 4, 8]

三、输出描述

输出为组合列表,当 array = [0, 1, 4, 5, 6, 7],num = 1时,输出为[[0], [1]]

四、测试用例

测试用例1:

1、输入

[0, 1, 4, 5, 6, 7]
1

2、输出

[[0], [1]]

3、说明

根据第一条亲和性调度原则,在剩余两个处理器的链路(0, 1, 2, 3)中选择处理器。 由于只有0和1可用,则返回任意一颗处理器即可。

测试用例2:

1、输入

[0, 1, 4, 5, 6, 7]
4

2、输出

[[4, 5, 6, 7]]

3、说明

根据第三条亲和性调度原则,必须选择同一链路剩余可用的处理器数量为4个的环。

五、解题思路

  1. 优先级确定:
    • 根据申请的处理器数量 num,确定每个链路的优先级。
    • 对于不同的 num,有不同的优先级规则:
      • num = 1:优先选择在一个链路中剩余可用处理器数量为 1 的情况,其次是 3,然后是 2,最后是 4。
      • num = 2:优先选择在一个链路中剩余可用处理器数量为 2 的情况,其次是 4,然后是 3。
      • num = 4:必须选择在一个链路中剩余可用处理器数量为 4 的情况。
      • num = 8:必须选择所有 8 个处理器。
  2. 组合生成:
    • 根据确定的优先级,从优先级最高的链路中生成所有可能的组合。
    • 如果在优先级最高的链路中没有足够的处理器,则考虑下一个优先级。
  3. 返回结果:
    • 如果找到符合要求的组合,则返回这些组合。
    • 否则,返回空列表。

六、Python算法源码

# Python版本
import sys
import itertools

def parse_array(array_line):
    # 移除方括号和空格
    array_line = array_line.strip().replace('[', '').replace(']', '').replace(' ', '')
    if not array_line:
        return []
    # 分割字符串并转换为整数列表
    return list(map(int, array_line.split(',')))

def get_priority(remaining, priorities):
    # 获取剩余处理器数量的优先级,索引越小优先级越高
    try:
        return priorities.index(remaining)
    except ValueError:
        return len(priorities)

def combine(lst, size):
    # 生成给定列表中所有可能的指定大小的组合
    return [sorted(list(c)) for c in itertools.combinations(lst, size)]

def find_combinations(link1, link2, num, priorities):
    result = []
    best_priority = float('inf')
    
    # 检查链路1
    remaining1 = len(link1) - num
    if remaining1 >= 0:
        priority1 = get_priority(remaining1, priorities)
        if priority1 < best_priority:
            best_priority = priority1
            result = []
        if priority1 == best_priority:
            result += combine(link1, num)
    
    # 检查链路2
    remaining2 = len(link2) - num
    if remaining2 >= 0:
        priority2 = get_priority(remaining2, priorities)
        if priority2 < best_priority:
            best_priority = priority2
            result = []
        if priority2 == best_priority:
            result += combine(link2, num)
    
    return result

def main():
    # 读取输入
    array_line = sys.stdin.readline()
    available = parse_array(array_line)
    
    num_line = sys.stdin.readline()
    num = int(num_line.strip())
    
    # 分离处理器到两个链路
    link1 = [proc for proc in available if 0 <= proc <= 3]
    link2 = [proc for proc in available if 4 <= proc <= 7]
    
    result = []
    
    # 根据申请数量选择组合
    if num == 1:
        result = find_combinations(link1, link2, num, [1,3,2,4])
    elif num == 2:
        result = find_combinations(link1, link2, num, [2,4,3])
    elif num == 4:
        if len(link1) == 4:
            result.append(sorted(link1))
        if len(link2) == 4:
            result.append(sorted(link2))
    elif num == 8:
        if len(available) == 8:
            result.append(sorted(available))
    
    # 打印结果
    print(result)

if __name__ == "__main__":
    main()

七、JavaScript算法源码

// JavaScript版本
const readline = require('readline');

// 创建接口读取输入
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 读取所有输入行
let input = [];
rl.on('line', (line) => {
    input.push(line.trim());
    if (input.length === 2) {
        rl.close();
    }
}).on('close', () => {
    // 解析输入数组
    let arrayLine = input[0].replace(/\[|\]|\s/g, '');
    let available = arrayLine ? arrayLine.split(',').map(Number) : [];
    
    // 解析申请数量
    let num = parseInt(input[1]);
    
    // 分离到两个链路
    let link1 = available.filter(proc => proc >=0 && proc <=3);
    let link2 = available.filter(proc => proc >=4 && proc <=7);
    
    let result = [];
    
    // 定义优先级
    const prioritiesMap = {
        1: [1,3,2,4],
        2: [2,4,3]
    };
    
    // 组合生成函数
    function combine(lst, size) {
        let res = [];
        function backtrack(start, path) {
            if (path.length === size) {
                res.push([...path].sort((a,b) => a - b));
                return;
            }
            for (let i = start; i < lst.length; i++) {
                path.push(lst[i]);
                backtrack(i+1, path);
                path.pop();
            }
        }
        backtrack(0, []);
        return res;
    }
    
    // 获取优先级
    function getPriority(remaining, priorities) {
        let index = priorities.indexOf(remaining);
        return index !== -1 ? index : priorities.length;
    }
    
    // 查找组合
    function findCombinations(link1, link2, num, priorities) {
        let bestPriority = Infinity;
        let bestResult = [];
        
        // 检查链路1
        let remaining1 = link1.length - num;
        if (remaining1 >=0 ) {
            let priority1 = getPriority(remaining1, priorities);
            if (priority1 < bestPriority) {
                bestPriority = priority1;
                bestResult = [];
            }
            if (priority1 === bestPriority) {
                bestResult = bestResult.concat(combine(link1, num));
            }
        }
        
        // 检查链路2
        let remaining2 = link2.length - num;
        if (remaining2 >=0 ) {
            let priority2 = getPriority(remaining2, priorities);
            if (priority2 < bestPriority) {
                bestPriority = priority2;
                bestResult = [];
            }
            if (priority2 === bestPriority) {
                bestResult = bestResult.concat(combine(link2, num));
            }
        }
        
        return bestResult;
    }
    
    // 根据num选择组合
    if (num ===1) {
        result = findCombinations(link1, link2, num, prioritiesMap[1]);
    }
    else if (num ===2) {
        result = findCombinations(link1, link2, num, prioritiesMap[2]);
    }
    else if (num ===4) {
        if (link1.length ===4) {
            result.push([...link1].sort((a,b)=>a-b));
        }
        if (link2.length ===4) {
            result.push([...link2].sort((a,b)=>a-b));
        }
    }
    else if (num ===8) {
        if (available.length ===8) {
            let all = [...available].sort((a,b)=>a-b);
            result.push(all);
        }
    }
    
    // 打印结果
    console.log(result);
});

八、C算法源码

// C语言版本
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 最大组合数量
#define MAX_COMB 1000

// 组合结构体
typedef struct {
    int combination[8];
    int size;
} Combination;

// 解析数组字符串
int parse_array(char *array_line, int *available) {
    int count =0;
    char *token = strtok(array_line, "[], ");
    while(token != NULL && count <8){
        available[count++] = atoi(token);
        token = strtok(NULL, "[], ");
    }
    return count;
}

// 生成组合
void combine(int *list, int size, int start, int n, int *current, int index, Combination *combs, int *count) {
    if(index == n){
        for(int i=0;i<n;i++) {
            combs[*count].combination[i] = current[i];
        }
        combs[*count].size = n;
        (*count)++;
        return;
    }
    for(int i=start;i<size;i++) {
        current[index] = list[i];
        combine(list, size, i+1, n, current, index+1, combs, count);
    }
}

// 获取优先级
int get_priority(int remaining, int *priorities, int p_size){
    for(int i=0;i<p_size;i++) {
        if(priorities[i] == remaining){
            return i;
        }
    }
    return p_size;
}

int main(){
    char array_line[100];
    int available[8];
    int total =0;
    
    // 读取第一行
    fgets(array_line, sizeof(array_line), stdin);
    total = parse_array(array_line, available);
    
    // 读取第二行
    int num;
    scanf("%d", &num);
    
    // 分离链路
    int link1[4], link2[4];
    int l1=0, l2=0;
    for(int i=0;i<total;i++) {
        if(available[i]>=0 && available[i]<=3){
            link1[l1++] = available[i];
        }
        else if(available[i]>=4 && available[i]<=7){
            link2[l2++] = available[i];
        }
    }
    
    Combination combs1[MAX_COMB];
    int count1 =0;
    Combination combs2[MAX_COMB];
    int count2 =0;
    Combination final_combs[MAX_COMB];
    int final_count=0;
    
    if(num ==1){
        int priorities1[] = {1,3,2,4};
        int p_size1 = sizeof(priorities1)/sizeof(int);
        
        // 链路1
        int remaining1 = l1 - num;
        if(remaining1 >=0){
            int priority1 = get_priority(remaining1, priorities1, p_size1);
            // 链路2
            int priorities2[] = {1,3,2,4};
            int priority2 = get_priority(l2 - num, priorities2, p_size1);
            if(priority1 < priority2){
                // 处理链路1
                int current[1];
                combine(link1, l1, 0, l1, current, 0, combs1, &count1);
                for(int i=0;i<count1;i++) {
                    final_combs[final_count++] = combs1[i];
                }
            }
            else if(priority2 < priority1){
                // 处理链路2
                int current[1];
                combine(link2, l2, 0, l2, current, 0, combs2, &count2);
                for(int i=0;i<count2;i++) {
                    final_combs[final_count++] = combs2[i];
                }
            }
            else{
                // 相同优先级,合并
                int current[1];
                combine(link1, l1, 0, l1, current, 0, combs1, &count1);
                combine(link2, l2, 0, l2, current, 0, combs2, &count2);
                for(int i=0;i<count1;i++) {
                    final_combs[final_count++] = combs1[i];
                }
                for(int i=0;i<count2;i++) {
                    final_combs[final_count++] = combs2[i];
                }
            }
        }
    }
    else if(num ==2){
        int priorities1[] = {2,4,3};
        int p_size1 = sizeof(priorities1)/sizeof(int);
        
        // 链路1
        int remaining1 = l1 - num;
        if(remaining1 >=0){
            int priority1 = get_priority(remaining1, priorities1, p_size1);
            // 链路2
            int priorities2[] = {2,4,3};
            int priority2 = get_priority(l2 - num, priorities2, p_size1);
            if(priority1 < priority2){
                // 处理链路1
                int current[2];
                combine(link1, l1, 0, l1, current, 0, combs1, &count1);
                for(int i=0;i<count1;i++) {
                    final_combs[final_count++] = combs1[i];
                }
            }
            else if(priority2 < priority1){
                // 处理链路2
                int current[2];
                combine(link2, l2, 0, l2, current, 0, combs2, &count2);
                for(int i=0;i<count2;i++) {
                    final_combs[final_count++] = combs2[i];
                }
            }
            else{
                // 相同优先级,合并
                int current[2];
                combine(link1, l1, 0, l1, current, 0, combs1, &count1);
                combine(link2, l2, 0, l2, current, 0, combs2, &count2);
                for(int i=0;i<count1;i++) {
                    final_combs[final_count++] = combs1[i];
                }
                for(int i=0;i<count2;i++) {
                    final_combs[final_count++] = combs2[i];
                }
            }
        }
    }
    else if(num ==4){
        if(l1 ==4){
            Combination comb;
            for(int i=0;i<4;i++) comb.combination[i] = link1[i];
            comb.size =4;
            final_combs[final_count++] = comb;
        }
        if(l2 ==4){
            Combination comb;
            for(int i=0;i<4;i++) comb.combination[i] = link2[i];
            comb.size =4;
            final_combs[final_count++] = comb;
        }
    }
    else if(num ==8){
        if(total ==8){
            Combination comb;
            for(int i=0;i<8;i++) comb.combination[i] = available[i];
            comb.size =8;
            final_combs[final_count++] = comb;
        }
    }
    
    // 打印结果
    printf("[");
    for(int i=0;i<final_count;i++){
        printf("[");
        for(int j=0;j<final_combs[i].size;j++){
            printf("%d", final_combs[i].combination[j]);
            if(j != final_combs[i].size -1) printf(", ");
        }
        printf("]");
        if(i != final_count -1) printf(", ");
    }
    printf("]\n");
    
    return 0;
}

九、C++算法源码

// C++版本
#include <bits/stdc++.h>
using namespace std;

// 组合生成函数
vector<vector<int>> combine(const vector<int>& list, int size){
    vector<vector<int>> combinations;
    vector<int> current;
    int n = list.size();
    // 使用位掩码生成所有组合
    for(int mask=0; mask<(1<<n); mask++){
        if(__builtin_popcount(mask) == size){
            vector<int> comb;
            for(int i=0;i<n;i++) if(mask & (1<<i)) comb.push_back(list[i]);
            sort(comb.begin(), comb.end());
            combinations.push_back(comb);
        }
    }
    return combinations;
}

// 获取优先级
int get_priority(int remaining, const vector<int>& priorities){
    auto it = find(priorities.begin(), priorities.end(), remaining);
    if(it != priorities.end()) return distance(priorities.begin(), it);
    return priorities.size();
}

// 查找组合
vector<vector<int>> find_combinations(const vector<int>& link1, const vector<int>& link2, int num, const vector<int>& priorities){
    vector<vector<int>> result;
    int best_priority = INT32_MAX;
    
    // 链路1
    int remaining1 = link1.size() - num;
    if(remaining1 >=0 ){
        int priority1 = get_priority(remaining1, priorities);
        if(priority1 < best_priority){
            best_priority = priority1;
            result.clear();
        }
        if(priority1 == best_priority){
            vector<vector<int>> combs = combine(link1, num);
            result.insert(result.end(), combs.begin(), combs.end());
        }
    }
    
    // 链路2
    int remaining2 = link2.size() - num;
    if(remaining2 >=0 ){
        int priority2 = get_priority(remaining2, priorities);
        if(priority2 < best_priority){
            best_priority = priority2;
            result.clear();
        }
        if(priority2 == best_priority){
            vector<vector<int>> combs = combine(link2, num);
            result.insert(result.end(), combs.begin(), combs.end());
        }
    }
    
    return result;
}

int main(){
    string array_line;
    getline(cin, array_line);
    
    // 解析数组
    vector<int> available;
    array_line.erase(remove(array_line.begin(), array_line.end(), '['), array_line.end());
    array_line.erase(remove(array_line.begin(), array_line.end(), ']'), array_line.end());
    array_line.erase(remove(array_line.begin(), array_line.end(), ' '), array_line.end());
    if(!array_line.empty()){
        stringstream ss(array_line);
        string num_str;
        while(getline(ss, num_str, ',')){
            available.push_back(stoi(num_str));
        }
    }
    
    // 读取申请数量
    int num;
    cin >> num;
    
    // 分离链路
    vector<int> link1, link2;
    for(auto proc: available){
        if(proc >=0 && proc <=3) link1.push_back(proc);
        else if(proc >=4 && proc <=7) link2.push_back(proc);
    }
    
    vector<vector<int>> result;
    
    if(num ==1){
        vector<int> priorities = {1,3,2,4};
        result = find_combinations(link1, link2, num, priorities);
    }
    else if(num ==2){
        vector<int> priorities = {2,4,3};
        result = find_combinations(link1, link2, num, priorities);
    }
    else if(num ==4){
        if(link1.size() ==4){
            vector<int> comb = link1;
            sort(comb.begin(), comb.end());
            result.push_back(comb);
        }
        if(link2.size() ==4){
            vector<int> comb = link2;
            sort(comb.begin(), comb.end());
            result.push_back(comb);
        }
    }
    else if(num ==8){
        if(available.size() ==8){
            vector<int> comb = available;
            sort(comb.begin(), comb.end());
            result.push_back(comb);
        }
    }
    
    // 打印结果
    cout << "[";
    for(int i=0;i<result.size();i++){
        cout << "[";
        for(int j=0;j<result[i].size();j++){
            cout << result[i][j];
            if(j != result[i].size()-1) cout << ", ";
        }
        cout << "]";
        if(i != result.size()-1) cout << ", ";
    }
    cout << "]\n";
    
    return 0;
}


🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

一文了解:LLM Dropout

咱们来聊聊&#xff0c;啥样的预测模型才算是好模型&#xff1f;简单来说&#xff0c;就是那种在处理它从没见过的数据时&#xff0c;也能表现得特别棒的模型。老派的泛化理论告诉我们&#xff0c;要想让模型在训练集和测试集上都表现差不多&#xff0c;就得让模型简单点。这个…

以一个B站必剪应用Bug过一下CVSS 4.0评分

Bug的内容就是Mac上的必剪无法完成B站视频上传新手任务。 这个从B站客服那里确认了。 没多大事儿,这是个设备相关的bug,我们也可以认为这样的小bug对用户是无害的,此时评分为0,无影响,但从学习角度出发我们将部分评分提高到L,也就是假设这是个CVE的话,聊一下安全问题。…

为什么推荐你一定要弄懂千门八将108局,学会做局思维的人有多么的厉害?

在纷繁复杂的社会与商业环境中&#xff0c;能够洞悉事物本质、预见趋势并巧妙布局的人&#xff0c;往往能在竞争中脱颖而出&#xff0c;成为时代的弄潮儿。而“千门八将108局”这一古老而深邃的智慧体系&#xff0c;不仅蕴含了中国传统文化中对于策略、心理学、人际交往的深刻理…

Java 集合实现类

Java 集合实现类 ​ Java 提供了一套实现了 Collection 接口的标准集合类。其中一些是具体类&#xff0c;这些类可以直接拿来使用&#xff0c;而另外一些是抽象类&#xff0c;提供了接口的部分实现 序号类描述1AbstractCollection 实现了大部分的集合接口。2AbstractList 继承…

java中日期时间类的api

目录 1. Instant 类 构造方法 1&#xff09;Instant.now()&#xff1a;获取当前时间戳。 常用方法 1&#xff09;plus(Duration duration) 2&#xff09;minus(Duration duration) 3&#xff09;toEpochMilli() 4&#xff09;ofEpochMilli(long epochMilli) 5&#xff09;案例:…

网站建设公司哪家好?好的网站建设公司应该有哪些特别之处?

面对众多的网站建设公司&#xff0c;企业该如何选择呢&#xff1f;如何才能避坑呢&#xff1f;本文将探讨好的网站建设公司应该具备的特别之处 案例&#xff0c;这是最直观的表现&#xff0c;一个好的网站建设公司必然拥有为数众多的的案例展示&#xff0c;且这些案例质量高&a…

基于resnet网络【系列】多类别图像识别、迁移学习:猫狗分类实战

目录 1、前言 2、resnet 猫狗分类实战 2.1 训练 2.2 推理 3、更换数据集训练 1、前言 ResNet&#xff08;残差网络&#xff09;是一种深度卷积神经网络架构&#xff0c;广泛用于图像分类任务。它是由微软研究院的研究人员于2015年推出的&#xff0c;以其通过使用残差连接…

Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)

引言 想象一下&#xff0c;只要描述你想要的画面&#xff0c;电脑就能帮你画出来。这在几年前还像是科幻小说里的场景&#xff0c;但随着神经网络和潜在扩散模型&#xff08;LDM&#xff09;技术的发展&#xff0c;现在已经成为可能。OpenAI 推出的 DALLE 工具&#xff0c;因其…

vue项目刷新后h5样式失效

vue项目刷新后h5样式失效 今天遇到一个bug&#xff0c;有一个Element的message组件&#xff0c;用它做的一个进度条&#xff0c;它是写在一个页面上&#xff0c;并且是用js控制dom元素的 web端一切正常&#xff0c;h5如果从别的页面跳过来也正常&#xff0c;但是&#xff0c;H…

服装生产管理:SpringBoot框架的高效策略

5 系统的实现 5.1 登录界面的实现 用户要想进入本系统必须进行登录操作&#xff0c;进入对应角色登录界面&#xff0c;在登录界面输入系统账号、登录密码&#xff0c;选择登录类型&#xff0c;点击登录按钮进行登录系统&#xff0c;管理员登录界面展示如图5-1所示&#xff0c…

【STM32开发之寄存器版】(八)-定时器的编码器接口模式

一、前言 1.1 编码器接口原理 编码器模式主要用于检测旋转编码器的转动方向和转动速度。旋转编码器一般输出两路相位相差90度的脉冲信号&#xff08;称为A相和B相&#xff09;&#xff0c;通过这两路信号&#xff0c;定时器可以判断编码器的旋转方向&#xff0c;并计数转动的脉…

嵌入式学习-线性表Day03-栈

嵌入式学习-线性表Day03-栈 栈 顺序栈 2&#xff09;入栈 3&#xff09;出栈 链式栈 栈 什么是栈? 只能在一端进行插入和删除操作的线性表&#xff08;又称为堆栈&#xff09;&#xff0c;进行插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底 栈特点&#xff1a; 先进…

儿童(青少年)可以参加哪些含金量高的比赛?

随着素质教育的推进&#xff0c;越来越多的家长和老师开始关注如何培养孩子的综合素质和能力。而参加各类比赛&#xff0c;不仅可以锻炼孩子的思维、动手能力和团队合作精神&#xff0c;还能帮助孩子在学习的过程中找到兴趣点和成就感。尤其是一些含金量高的比赛&#xff0c;不…

什么是静态加载-前端

什么是前端静态加载 在前端开发中&#xff0c;静态加载是一种常见且重要的技术。简单来说&#xff0c;前端静态加载指的是在页面加载时将所需的资源&#xff08;如HTML、CSS、JavaScript、图片等&#xff09;一并加载到用户的浏览器中。这种方式有助于提高页面的加载速度和用户…

【宽搜】6. leetcode 513 找树左下角的值

1 题目描述 题目链接&#xff1a;找树左下角的值 2 题目解析 思路&#xff1a; 可以使用 层序遍历&#xff0c; 将每一层的值都存入到一个vector< int> 中&#xff0c;当这一层是最后一层的时候&#xff0c;将vector< int>中的第一个值返回即可。 3 代码 cla…

RemoteView(kotlin)

使用场景&#xff1a;通知栏&桌面部件 自定义通知栏 通知权限申请 manifest配置 <uses-permission android:name"android.permission.POST_NOTIFICATIONS" />权限动态申请 package com.example.kotlinlearn.Common;import android.Manifest; import an…

国产长芯微LDUM8801光耦兼容的单通道隔离式栅极驱动器P2P替代UCC23513 FOD8342 TLP5751成本低,质量更好

描述 LDUM8801是单通道兼容光耦输入的隔离式栅极驱动器&#xff0c;可应用于驱动IGBT、SiC 和 MOSFET。它可以提供5A的峰值拉/灌电流。支持150kV/μs的最小共模瞬态免疫&#xff08;CMTI&#xff09;&#xff0c;确保了系统的鲁棒性。驱动器的最大电源电压为32V。 其与光耦式栅…

【计网】【计网】从零开始学习http协议 ---理解http重定向和请求方法

去光荣地受伤&#xff0c; 去勇敢地痊愈自己。 --- 简嫃 《水问》--- 从零开始学习http协议 1 知识回顾2 认识网络重定向3 http请求方法3.1 http常见请求方法3.2 postman工具进行请求3.3 处理GET和POST参数 1 知识回顾 前面两篇文章中我们学习并实现了http协议下的请求与应…

【LeetCode】每日一题 2024_10_9 找到按位或最接近 K 的子数组(LogTrick、位运算)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;找到按位或最接近 K 的子数组 代码与解题思路 今天是 2100 的题目&#xff0c;难度略高&#xff0c;不在我的能力范围&#xff0c;推荐题解&#xff1a;两种方法&#xff1a;LogTrick/滑…

设计模式——门面模式 | 外观模式

哈喽&#xff0c;各位盆友们&#xff01;我是你们亲爱的学徒小z&#xff0c;今天给大家分享的文章是设计模式的——门面模式。 文章目录 定义通用类图1.通用结构2.优点3.缺点 使用场景注意事项1.一个子系统可以有多个门面2.门面不参与子系统内的业务逻辑 定义 定义&#xff1a;…