0818-0824面试题目和复习整理

news2024/9/23 16:12:39

根据面试问的问题整理一下

1. 并查集

int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好
vector<int> father = vector<int> (n, 0); // C++里的一种数组结构

// 并查集初始化
void init() {
    for (int i = 0; i < n; ++i) {
        father[i] = i;
    }
}
// 并查集里寻根的过程
int find(int u) {
    return u == father[u] ? u : father[u] = find(father[u]); // 路径压缩
}

// 判断 u 和 v是否找到同一个根
bool isSame(int u, int v) {
    u = find(u);
    v = find(v);
    return u == v;
}

// 将v->u 这条边加入并查集
void join(int u, int v) {
    u = find(u); // 寻找u的根
    v = find(v); // 寻找v的根
    if (u == v) return ; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回
    father[v] = u;
}

2. 梯度下降法和二分法求一个函数

对于梯度下降法,x应该考虑实际函数来做,而且lr不能设置的太大,会跳过这个解,二分法最好还是用while来写吧,我用的递归,很奇怪

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int m = 10000;

float e = 0.0001;
float f(float x) {
    return exp(x) + pow(x, 3) - 5;
}
float grad(float x) {
    return exp(x) + 3 * x * x;
}
float func1(float left, float right) {
    float mid = (left + right) / 2;
    if (f(mid) > e) {
        return func1(mid, right);
    }
    else if (f(mid) < -e) {
        return func1(left, mid);
    }
    else return mid;
}
float func2(float x) {
    int epoch = 10000;

    float step = 0.0001;
    for (int i = 0; i < epoch; i++) {
        if (f(x) > -e && f(x) < e) {
            return x;
        }
        
        x = x - step * grad(x);
        cout << x << endl;
    }
    return x;
}
int main()
{
    float x = 3;
    cout << func1(-10,10) << endl;
    return 0;
}

3. 为什么分类模型用交叉熵损失函数,而不用MSE

1. MSE是均方误差损失函数,表示的是m个样本的均值,网络模型用它来预测,就是为了拟合实际的值与预测值之间的差。得到的是一个值。

2. 分类问题一般是需要一系列的激活函数,将预测值映射到0-1之间

3. 分类问题使用交叉熵,Loss下降的更快。

4. 使用交叉熵是凸优化,MSE是非凸优化

4. maxpooling的反向传播

5. scaled product attention

6. 链表逆序

我怎么都想不出来链表逆序,烦死了

看模板思路吧: 是我想的太复杂了,绕来绕去 其实每次只要维护三个节点,把从左到右的连接改成从右到左的就行了,然后三个节点都往后移动一次。

    ListNode * reverse(ListNode * node){
        ListNode * pre = nullptr, * cur = node;
        
        while(cur!=nullptr){
            ListNode * nextt = cur->next;
            cur->next = pre;
            pre = cur;
            cur = nextt;
        }
        return pre;
    }

7. K个一组反转链表

    ListNode * reverse(ListNode * node){
        ListNode * pre = nullptr, * cur = node;
        
        while(cur!=nullptr){
            ListNode * nextt = cur->next;
            cur->next = pre;
            pre = cur;
            cur = nextt;
        }
        return pre;
    }
    ListNode * findtail(ListNode * node){
        while(node != nullptr && node->next != nullptr){
            node = node->next;
        }
        return node;
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
       if(k == 1) return head;
        vector<ListNode *> heads;
        ListNode * cur = head;
        heads.push_back(head);
        int idx = 1;
        while(cur != nullptr){
            if(idx % k == 0){
                ListNode * t = cur->next;
                heads.push_back(t);
                cur -> next = nullptr;
                cur = t;
                
            }else{
                cur = cur ->next;
            }
            idx++;
        }
        for(auto head:heads){
            while(head!=nullptr){
                cout<<head->val<<" ";
                head = head->next;
            }cout<<endl;
        }
        // 翻转链表
        ListNode * res = new ListNode(0);
        ListNode * pre = res;
        if((idx-1)%k == 0){
            for(ListNode* node : heads){
                node = reverse(node);
                ListNode * tail = findtail(node);
                pre -> next = node;
                pre = tail;
            }
        }else{
            for(int i =0;i<heads.size()-1;i++){
                ListNode * node = reverse(heads[i]);
                ListNode * tail = findtail(node);
                pre -> next = node;
                pre = tail;
            }
            pre->next = heads[heads.size()-1];
        }
        return res->next;
    }

思路倒是不难想,就是先分组再逆序再组合起来,但是好麻烦好容易出错。。

合起来的时候要知道每个子链表的头尾,我是根据头找尾,但是应该可以在reverse的时候就把尾记录下来,这样可以直接得到头尾

还有,每次通过while(x->next  != nullptr)的时候要加上while(x!=nullptr && x->next != nullptr)

8. python写AUC

def calculate_AUC(y_pred,y_true):
    sorted_indices = np.argsort(y_pred)
    sorted_y_true = y_true[sorted_indices]
    sorted_y_pred = y_pred[sorted_indices]

    # 计算真阳性率和假阳性率
    tpr = []  # 真阳性率
    fpr = []  # 假阳性率
    total_positive = np.sum(sorted_y_true)
    total_negative = len(sorted_y_true) - total_positive

    current_positive = 0
    current_negative = 0
    for i in range(len(sorted_y_true)):
        if sorted_y_true[i] == 1:
            current_positive += 1
        else:
            current_negative += 1
        tpr.append(current_positive / total_positive)
        fpr.append(current_negative / total_negative)

    # 计算AUC
    auc = np.trapz(tpr, fpr)
    return auc

记得排序并根据排序返回索引的方式:np.argsort()

记得求积分的方法:np.trapz()

AUC的时间复杂度?

9. 全排列公式

关键在于去重,去重之前我都会写,唉,还是要记一下思路

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking (vector<int>& nums, vector<bool>& used) {
        // 此时说明找到了一组
        if (path.size() == nums.size()) {
            result.push_back(path);
            return;
        }
        for (int i = 0; i < nums.size(); i++) {
            // used[i - 1] == true,说明同一树枝nums[i - 1]使用过
            // used[i - 1] == false,说明同一树层nums[i - 1]使用过
            // 如果同一树层nums[i - 1]使用过则直接跳过
            if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
                continue;
            }
            if (used[i] == false) {
                used[i] = true;
                path.push_back(nums[i]);
                backtracking(nums, used);
                path.pop_back();
                used[i] = false;
            }
        }
    }
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        result.clear();
        path.clear();
        sort(nums.begin(), nums.end()); // 排序
        vector<bool> used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
};

全排列的时间复杂度是多少?

10. FM的公式,如何优化的

用pytorch写:

import numpy as np
import torch.nn as nn
import torch
class FM(nn.Module):
    def __init__(self,input_size,k):
        super(FM, self).__init__()
        self.linear = nn.Linear(input_size, 1)
        self.v = nn.Parameter(torch.randn(input_size,k))

    def forward(self,x):
        linear_part = self.linear(x)
        interaction_part = 0.5 * torch.sum(torch.pow(x@(self.v),2) - pow(x,2)@pow(self.v,2))
        return linear_part + interaction_part

11. 颜色分类

数组只包含0,1,2三种,排序

这题其实感觉在多分类里能用到,比如0101001这种排序成0001,方便求AUC

没想到这么简单的做法,我一直在纠结怎么交换,结果一个ptr就能解决

    void sortColors(vector<int>& nums) {
        // 对0排序
        int ptr = 0;
        int n = nums.size();
        for(int i =0;i<n;i++){
            if(nums[i] == 0){
                swap(nums[ptr],nums[i]);
                ptr++;
            }
        }
        for(int i =0;i<n;i++){
            if(nums[i] == 1){
                swap(nums[ptr],nums[i]);
                ptr++;
            }
        }
    }

12. 分割回文串

只要知道这道题是回溯就行了,和全排列一样的思路

    bool huiwen(string s){
        int i = 0, j = s.size()-1;
        while(i<j){
            if(s[i] != s[j]) return false;
            i++, j--;
        }
        return true;
    }
    vector<vector<string>> res;
    vector<string> tmp;
    void dfs(int begin,string s){
        if(begin == s.size()){
            res.push_back(tmp);
        }
        for(int i = begin;i<= s.size()-1;i++){
            if(huiwen(s.substr(begin,i-begin+1)))
            {
                tmp.push_back(s.substr(begin,i-begin+1));
                dfs(i+1,s);
                tmp.erase(tmp.end()-1);
            }
        }
    }
    vector<vector<string>> partition(string s) {
        dfs(0,s);
        return res;
    }

11.MMOE是如何对多目标进行预估的,如果单独把两个模型直接预测得到目标,和用多目标模型有什么区别?

12. c++怎么处理异常

13. 给数组a1,a2,a3,b1,b2,b3 怎么不使用额外空间变成a1,b1,a2,b2,a3,b3

14.CT值表示什么意义,范围是多少,CT值为0代表什么

15. 双向链表和数组的插入\访问时间复杂度,双向链表如何插入一个数

16 pytorch如何反向传播,如果一个层被冻结了,上一层的梯度如何传播?

17. tensorRT是如何部署,加载模型并预测的?

18. 我的去噪模型的精度是如何衡量的,用什么指标,有什么其他指标,他们分别有什么缺陷

19. 联想编程题:

给一个字符串,里面是0-9之间的数字。对字符串进行任意分割,看每个子串(连续的)是否能被4整除,输出所有能整除的子串的个数。(前导0也算,04和4算两个)

我只会用for套for,只过了45%,感觉dp能做,但是没写出来

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

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

相关文章

Kubernetes部署相关概念

本文封面由 凯楠&#x1f4f8;友情提供 Kubernetes部署相关概念概览 容器运行时&#xff08;container runtime&#xff09;&#xff1a; 是负责在计算机操作系统上创建、运行和管理容器的软件组件。它是整个容器化环境中的关键组成部分&#xff0c;与操作系统内核紧密交互&a…

linux(Ubuntu )搭C++ 最新版GDAL完整教程

在前面的文章中主要是介绍如何在windows系统下利用python安装gdal库&#xff0c;如下&#xff1a; 如何快速安装GDAL 在linux环境下python安装gdal也可以利用现成的whl文件&#xff0c;但是安装c GDAL环境的比较麻烦&#xff0c;目前网络上大多是安装的老版本的教程&#xff…

springboot3 SecurityConfig SecurityFilterChain 需要使用CorsFilter,实际是CorsWebFilter

使用springboot3做微服务开发&#xff0c;由于网关gateway使用webFlux&#xff0c;因此导致实际类型是CorsWebFilter&#xff0c;但是在public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception方法中&#xff0c;项目启动报错…

rt-studio+clion+cubemx联合使用(使用scons进行整合)

前言 以前在clion中使用rt-thread的方式 1. 使用的cubemx生成的方式: 这种方式只能使用rt-thread的内核版本 2. 自己去把rt-thread的源码拷贝到对应的工程中&#xff0c;再编写对应的CMakelists文件进行管理思考 我的想法是通过rt-studio创建项目&#xff0c;然后通过工具转…

河南萌新2024第二场

H 狼狼的备忘录 题目大意&#xff1a; 给定n本备忘录&#xff0c;里面记录了一个人的m个星座信息&#xff0c;要求按一下要求整理备忘录 A&#xff1a;同一个成员的星座信息 x 是星座信息 y 的后缀&#xff0c;那么星座信息 x 会没有星座信息 y 完整&#xff0c;从而应该只保…

Nginx + Docker Compose前后端分离部署到服务器过程记录

一、采用Nginx部署前端VUE&#xff08;Vite&#xff09; 1、修改配置文件vite.config.ts&#xff0c;将本地环境改为开发环境 注意base处只能是‘/’ 不能是 ‘./!在这里插入图片描述 对项目进行打包 在当前目录的终端执行&#xff1a;npm run build 若报错如下&#xff1…

CORS错误

说明&#xff1a;记录一次CORS&#xff08;跨域&#xff09;错误&#xff0c;及解决方法。 场景 在vscode里面运行前端项目&#xff0c;idea中运行后端项目&#xff0c;登录时&#xff0c;访问接口&#xff0c;报CORS错误&#xff0c;如下&#xff1a; 解决 在后端项目的网关…

【PyQt6 应用程序】PyUIC使用加载可视化文件

使用uic模块可以方便地从Qt Designer设计的UI文件加载用户界面。这种方法使得设计和布局变得更加直观,并且可以将用户界面设计与程序逻辑分离。 本次展示如何使用PyQt6和uic模块来加载一个简单的UI文件。 文章目录 需要使用Qt Designer创建一个UI文件。Qt Designer是一个强大…

并行 parallel DOP 受 Resource Manager 限制

监控 Script select s.SID, s.SERIAL#, s.username ,rpd.plan, s.RESOURCE_CONSUMER_GROUP, rpd.PARALLEL_DEGREE_LIMIT_P1 from v$session s, DBA_RSRC_CONSUMER_GROUPS rcg, DBA_RSRC_PLAN_DIRECTIVES rpd , V$RSRC_CONSUMER_GROUP v…

甲方(北汽)渗透测试面试经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 所在城市&…

IDEA 2024.2.0.2 使用 Jrebel and XRebel 热部署

安装 激活 工具网站中url和邮箱复制进去 设置 允许项目自动构建 允许开发过程中自动部署

苍穹外卖项目DAY10

苍穹外卖项目DAY10 1、Spring Task 1.1、介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 只要是需要定时处理的场景都可以使用Spring Task…

大数据技术之Flume 拓扑结构(4)

目录 Flume 拓扑结构 简单串联 (Simple Serial) 复制和多路复用 (Replication and Multiplexing) 负载均衡和故障转移 (Load Balancing and Failover) 聚合 (Aggregation) 示例配置 Flume 拓扑结构 Flume 支持多种拓扑结构来满足不同的数据收集和传输需求。以下是 Flume 中常…

复现ssrf漏洞

目录 一、pikachu靶场 1、靶场环境&#xff1a; 使用docker拉取&#xff1a; docker run -d -p 8765:80 8023/pikachu-expect:latest 2、使用dict 3、使用file读取文件 二、redis未授权访问 1、源码 2、使用bp探测端口 3、继续使用bp探测172.18.0.2的端口 4、使用go…

鸿蒙(API 12 Beta3版)【使用AVPlayer开发音频播放功能(C/C++)】音视播放与录制

使用AVPlayer可以实现端到端播放原始媒体资源&#xff0c;本开发指导将以完整地播放一首音乐作为示例&#xff0c;向开发者讲解AVPlayer音频播放相关功能。 播放的全流程包含&#xff1a;创建AVPlayer&#xff0c;设置播放资源&#xff0c;设置播放参数&#xff08;音量/倍速/…

运用Archimate为 智慧文旅搭建 数字化架构体系【系统架构】

ArchiMate是一种用于企业架构建模的开放、独立且详细的语言&#xff0c;它提供了一套丰富的概念和关系来描述、分析和可视化企业架构的不同领域。以下是ArchiMate建模的一些关键功能&#xff1a; 多视图建模&#xff1a;ArchiMate定义了23个示例视图&#xff0c;分为四类&#…

python模块04-requests

1 requests模块发送请求 Requests是一个Python HTTP庫 相关参考资料&#xff1a; 文档&#xff1a;Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档 requests PyPI&#xff1a;requests PyPI requests源码&#xff1a;GitH0ub - psf/requests: A simple, yet elegant, …

封装车牌号码输入组件

<!-- Title: 国内车辆号牌号码输入组件Description: 国内车辆号牌号码输入组件&#xff0c;具体使用方法如下&#xff1a;<its-hphmInput v-model"form.hphm" :glbm"京A" :parentmessage.sync"hphm" onChange"provinceAbbreviationC…

基于R语言进行AMMI分析3

参考资料&#xff1a;https://cran.r-project.org/web/packages/agricolae/agricolae.pdf 1、plot()函数 本次介绍的是Agricolae包中的plot.AMMI()函数。此函数可以绘制AMMI双标图&#xff0c;也可以绘制三标图&#xff08;三个坐标轴&#xff0c;IPCA1&#xff0c;IPCA2&…

「C++系列」类/对象

文章目录 一、类1. 基本类的定义2. 类的访问控制3. 类的实例化4. 构造函数和析构函数5. 继承6. 类的使用 二、对象1. 创建对象2. 对象的生命周期3. 对象的内存4. 对象的操作5. 对象的复制6. 总结 三、应用案例1. 定义BankAccount类2. 分析 四、相关链接 一、类 C 类&#xff0…