面试准备算法

news2024/11/25 12:24:25

用最少数量的箭引爆气球

class Solution {
public:
    class MyCompare{
    public:
        bool operator()(vector<int>& a, vector<int>& b){
            return a[0] < b[0];
        }
    };
    int findMinArrowShots(vector<vector<int>>& points) {
        int count = 1;
        MyCompare cmp;
        sort(points.begin(), points.end(), cmp);
        for(int i=1; i<points.size(); i++){
            if(points[i][0] > points[i-1][1]){ //当前左边界大于前一个右边界
                count++;
            }else{
                points[i][1] = min(points[i][1], points[i-1][1]); //更新右边界
            }
        }
        return count;
    }
};

填充每个节点的下一个右侧节点指针

给一个二叉树:
在这里插入图片描述
填充它的每个next指针,让指针指向其下一个右侧节点。

在这里插入图片描述

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/

class Solution {
public:
    Node* connect(Node* root) {
        if(root == nullptr){
            return nullptr;
        }

        queue<Node*> que;
        que.push(root);
        while(!que.empty()){
            int n = que.size();
            Node* prev = nullptr;
            for(int i=1; i<=n; i++){
                Node* curr = que.front();
                que.pop();
                if(curr->left){
                    que.push(curr->left);
                }
                if(curr->right){
                    que.push(curr->right);
                }
                if(i != 1){
                    prev->next = curr;
                }
                prev = curr;
            }
        }
        return root;
    }
};

二叉搜索树迭代器

实现一个二叉搜索树迭代器BSTIterator,表示一个按中序遍历的迭代器。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class BSTIterator {
private:
    void inorder(TreeNode* root, vector<int>& res){
        if(!root){
            return;
        }
        inorder(root->left, res);
        res.push_back(root->val);
        inorder(root->right, res);
    }

    vector<int> inorderTraversal(TreeNode* root){
        vector<int> res;
        inorder(root, res);
        return res;
    }

    vector<int> arr;
    int idx;
public:
    BSTIterator(TreeNode* root) {
        this->idx = 0;
        arr = inorderTraversal(root);
    }
    
    int next() {
        return arr[idx++];
    }
    
    bool hasNext() {    
        return idx < arr.size();
    }
};

/**
 * Your BSTIterator object will be instantiated and called as such:
 * BSTIterator* obj = new BSTIterator(root);
 * int param_1 = obj->next();
 * bool param_2 = obj->hasNext();
 */

克隆图

给一个无向连通图中一个节点的引用,请返回该图的深拷贝。
深度优先搜索

图的深拷贝是构建一张与原图结构,值均一样的图,但是其中的节点不再是原来图节点的引用。
因此,为了深拷贝出整张图,我们需要知道整张图的结构以及对应节点的值。

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> neighbors;
    Node() {
        val = 0;
        neighbors = vector<Node*>();
    }
    Node(int _val) {
        val = _val;
        neighbors = vector<Node*>();
    }
    Node(int _val, vector<Node*> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
};
*/

class Solution {
public:
    unordered_map<Node*, Node*> visited;
    Node* cloneGraph(Node* node) {
        if(node == nullptr){
            return node;
        }

        //如果该节点已经被访问过,直接从哈希表中取出对应的克隆节点返回
        if(visited.find(node) != visited.end()){
            return visited[node];
        }

        //克隆节点
        Node* cloneNode = new Node(node->val);
        visited[node] = cloneNode;

        for(auto& neighbor : node->neighbors){
            cloneNode->neighbors.emplace_back(cloneGraph(neighbor));
        }

        return cloneNode;
    }
};

除法求值

在这里插入图片描述
在这里插入图片描述
广度优先搜索
将整个问题建模成一张图:给定图中的一些点(变量),以及某些边的权值(两个变量的比值),试求出任意两点(两个变量)求出其路径长(两个变量的比值)。

因此,我们首先要遍历equations数组,找出其中所有不同的字符串,并通过哈希表将每个不同的字符串映射成整数。

在构建完图之后,对于任何一个查询,就可以从起点出发,通过广度优先搜索的方式,不断更新起点与当前点之间的路径,直到搜索到终点为止。

寻找重复值

在这里插入图片描述
快慢指针
对nums数组建图,每个位置i连一条i->nums[i]的边,由于存在重复的数字target,因此,target这个位置至少有两条指向它的边,因此一定存在环

那么问题等价于找环的入口。

我们将设置慢指针slow和快指针fast,慢指针每次走一步,快指针走两步,在有环的情况下一定相遇,此时再将慢指针放到slow,两个指针同时移动一步,相遇的点就是答案。

课程表二

现在共有numCourses门课程需要选,记为0到numCourses-1。

给定一个数组,它的每一个元素表示先后之间要修的课程顺序,[ai,bi]表示要学习ai,先要学习bi。

给出先修顺序。

在这里插入图片描述

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        //求拓扑顺序,每次找到入度为0的点,就是第一步要走的,随后减掉入度为0的相邻点的入度。
        vector<int> inDegree(numCourses, 0); //求每个点的入度
        vector<vector<int>> nextNode(numCourses); //求每个点相邻的点
        vector<int> res;

        for(auto &p : prerequisites){
            inDegree[p[0]]++;
            nextNode[p[1]].push_back(p[0]);
        }

        queue<int> que;
        for(int i=0; i<numCourses; i++){
            if(inDegree[i] == 0){
                que.push(i);
            }
        }

        while(!que.empty()){
            int course = que.front();
            que.pop();
            res.push_back(course);

            for(auto &p : nextNode[course]){
                inDegree[p]--;

                if(inDegree[p] == 0){
                    que.push(p);
                }
            }
        }


        if(res.size() != numCourses){
            return {};
        }
        return res;
    }
};

单词搜索

给定一个mxn二维字符网格board和一个字符串单词word,如果word存在于网格中返回true,否则返回false。

在这里插入图片描述
在一个信噪比为63:1,带宽为8KHz的信道上传输某个二进制信号,其最大数据速率可以达到?

  • 根据香农定理,最大速率=Wlog2(1+S/N) = 48kHz
  • 根据奈奎斯定义2W*log 2V = 16000b/s

线程的实现可分为三类,用户级线程,内核级线程以及混合线程。

TCP首部的固定长度为20Byte。

ORDER BY排序,默认是升序。

ORDER BY排序可以对多列或单列进行排序。

多列排序是前一列存在相同值才会根据后一列进行排序。

SELECT prod_price FROM Products ORDER BY prod_price DESC;表示查询结果根据prod_price倒序排。

临界资源是互斥共享资源,非共享数据不属于临界资源。
磁带机、打印机一次只能允许一个进程使用,CPU也是临界资源。

HTTP常用的首部字段Connection表示客户端要求服务器使用持久连接,以便其它请求复用。

HOST:客户端发送请求时,用来指定服务器的域名。
Content-Length:服务器返回数据时,表明本次回应的数据长度。
Connection字段最常用于客户端要求服务器使用持久连接,以便其它请求复用。
Content-Type字段用于服务器回应时,告诉客户端,本次数据是什么格式。
Content-Encoding字段说明数据的压缩方式。表示服务器返回的数据用了什么压缩格式。
Refer告知服务器请求的原始资源的URI。

统计每日新增用户数:
第一步查出用户第一次登录的日期,同时去重user_id,第二步group by date即可。

创建软链接:
ln -s file1 link1

SELinux是一种安全增强型Linux,默认的工作模式是强制模式,系统严格按照SELinux策略进行访问控制,任何违反策略的访问都会被拒绝。这种模式提供了最高的安全性。

查看防火墙状态的命令是:

  • iptables -L
  • systemctl status firewalld

TCP协议使用的传输协议是IP。

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

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

相关文章

啥是粘包和半包,咋解决?

写在前面 本文看下半包和粘包。 1&#xff1a;什么是半包和粘包&#xff0c;以及如何解决 因为网络传输数据都是一个数据包一个数据包传输的&#xff0c;就像这样&#xff1a; 在读取这些数据包时如果读到了数据包A的一部分就是半包。如果是读到了数据包A和数据包B&#xf…

从网易云音乐宕机事件看软件危机管理-如何保持服务稳定性

引言:当音乐突然停止 想象一下,你正沉浸在网易云音乐精心为你推荐的歌单中,享受着悠闲的周末下午。突然,音乐戛然而止,App反复崩溃,网页上只剩下冰冷的"502 Bad Gateway"。这不是科幻小说的情节,而是2023年8月19日下午真实发生在数百万网易云音乐用户身上的事。 作…

软考-软件设计师(程序设计语言习题)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

「Java 项目详解」API 文档搜索引擎(万字长文)

目录 运行效果 一、项目介绍 一&#xff09;需求介绍 二&#xff09;功能介绍 三&#xff09;实现思路 四&#xff09;项目目标 二、前期准备 一&#xff09;了解正排索引 二&#xff09;了解倒排索引 三&#xff09;获取 Java API 开发文档 四&#xff09;了解分词…

《黑神话:悟空》全球正式上线!美猴王硬核出圈!

8月20日&#xff0c;这一日期注定将被铭记为中国游戏史上的辉煌时刻。国产3A大作《黑神话&#xff1a;悟空》正式上线&#xff0c;以其惊人的市场表现和文化深度引发了全球玩家的狂热追捧。这款游戏不仅在国内市场引起了强烈反响&#xff0c;更是在全球范围内掀起了一股不可阻挡…

日元回升,澳元强势,市场静待央行指引

一、美元疲软&#xff0c;日元强势反弹 近期&#xff0c;美国就业数据的大幅下修为市场带来经济衰退隐忧&#xff0c;同时增强了美联储9月降息的预期。在此背景下&#xff0c;美元走势疲软&#xff0c;而日元则借机延续回升势头。周三&#xff0c;美元兑日元一度跌至144.44&a…

Apache SeaTunnel数据处理引擎适配的演进和规划

作者 | Chao Tian (tyrantlucifer)&#xff0c;Apache SeaTunnel PMC Member 摘要 Apache SeaTunnel作为一个高性能数据同步工具&#xff0c;以其高效的数据处理能力&#xff0c;为数据集成领域带来了创新。在引擎上&#xff0c;Apache SeaTunnel除了支持自身的Zeta引擎外&am…

UVa1668/LA6039 Let’s Go Green

UVa1668/LA6039 Let’s Go Green 题目链接题意分析AC 代码 题目链接 本题是2012年icpc亚洲区域赛雅加达(Jakarta)赛区的题目 题意 输入一棵n&#xff08;2≤n≤100000&#xff09;个结点的树&#xff0c;每条边上都有一个权值。要求用最少的路径覆盖这些边&#xff0c;使得每条…

JAVA家政服务独立多端平台服务系统小程序源码

解锁现代生活新方式✨ —— "家政服务独立用户多端平台系统"全攻略&#x1f3e0; &#x1f680;【开篇&#xff1a;告别繁琐&#xff0c;拥抱智能家政新时代】 在这个快节奏的时代&#xff0c;谁不想回家就能享受一份宁静与舒适呢&#xff1f;但忙碌的工作、琐碎的…

算法日记day 45(单调栈之每日温度|接雨水)

一、每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来…

基本数据类型 --- 浮点型

float的机器码表示&#xff1a; 一个float数据 (pow(-1, sign) fraction) * pow(2, exponent - 127) 由上图&#xff0c;可得&#xff1a; (pow(-1, sign) fraction) * pow(2, exponent - 127) ( 1 2^(-2) ) * pow(2, 124-127) 0.15625 其他文章&#xff1a; https://b…

Go第一个程序

package mainimport "fmt"func main() {str : "hello go"fmt.Println(str) }上述很简单&#xff0c;如何使用os包获取命令行参数呢&#xff1f; package mainimport ("fmt""os" )func main() {fmt.Println(os.Args)str : "hello…

typora激活流程

1.安装typora Typora中文官网&#xff1a;Typora 官方中文站 Typora官网&#xff1a;https://typora.io/releases/all 2.打开软件安装位置 找到路径Typora\resources\page-dist\static\js的js文件&#xff0c;使用记事本编辑打开 替换 CtrlF查找 e.hasActivated"true&…

python-逆序数(赛氪OJ)

[题目描述] 在一个排列中&#xff0c;如果一对数的前后位置与大小顺序相反&#xff0c;即前面的数大于后面的数&#xff0c;那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。比如一个元素个数为 4 的数列&#xff0c;其元素为 2,4,3,1&#xff0c;则 (2,…

ubuntu20 vmware硬盘空间不够,进行扩容,实操成功!

背景 在编译mysql源码之前只给虚拟机分配了20G的空间&#xff0c;但是实际编译过程中&#xff0c;发现很快20G空间就被用完了&#xff0c;于是需要对已分配空间的虚拟机进行扩容至50G。 如何进行扩容&#xff1f; 注意首先需要在extended那一块先resize&#xff0c;把unloca…

H3C M-LAG与双活网关接口结合应用场景实验

H3C M-LAG与双活网关接口结合应用场景实验 实验拓扑 ​​ 实验需求 此实验需要在模拟器中使用交换机型号 S6850SW3 为接入交换机,连接 PC1 在 VLAN 10,连接 PC2在 VLAN 20,SW3 双上行连接到两台核心交换机SW1 和 SW2 为核心交换机,配置 M-LAG,并作为 VLAN 10 和 VLAN 2…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 07数据中心的边缘

本章将帮助你回答以下问题 可以用哪些方式将 Clos 拓扑连接到外部网终?边缘部署路由协议的最佳实践是什么?企业应如何处理混合云中的连接? 连接模型 为什么要连接到外部世界? 数据中心连接到外部世界的原因很多。如果你要对外提供某种服务(例如搜索服务广告推荐系统或内…

C语言:深入理解文件操作

目录 1. 为什么使用文件&#xff1f; 2. 什么是文件&#xff1f; 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 二进制文件和文本文件&#xff1f; 3.1测试代码&#xff1a; 4. 文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开…

【刷题笔记】二叉树2

1 二叉树的层序遍历 上一期我们讲了关于二叉树的前序、中序以及后序遍历的相关内容。然而&#xff0c;还存在一种遍历方式&#xff0c;这种方式非常符合我们人类的正常思维&#xff0c;可以求解很多树相关的问题&#xff0c;比较暴力——二叉树的层序遍历。 二叉树的层序遍历与…

股票买卖的思路与代码

题目 1302&#xff1a;股票买卖 时间限制: 1000 ms 内存限制: 65536 KB 提交数:8660 通过数: 4290 【题目描述】 最近越来越多的人都投身股市&#xff0c;阿福也有点心动了。谨记着“股市有风险&#xff0c;入市需谨慎”&#xff0c;阿福决定先来研究一下简化版的股…