复试 || 就业day06(2024.01.01)算法篇

32 篇文章 4 订阅
32 篇文章 3 订阅

前言

💫你好,我是辰chen,本文旨在准备考研复试或就业
💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台
💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容
🌟 仅给出C++版代码

以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新),欢迎大家的关注:

💥ACM-ICPC算法汇总【基础篇】
💥ACM-ICPC算法汇总【提高篇】
💥AIoT(人工智能+物联网)
💥考研
💥CSP认证考试历年题解

分糖果


题目链接:分糖果

C++版AC代码:

class Solution {
public:
    int min(int a, int b){
        if (a > b) return b;
        else return a;
    }
    int distributeCandies(vector<int>& candyType) {
        unordered_map<int, int> m;
        for (int i = 0; i < candyType.size(); i ++ ) m[candyType[i]] ++;
        int num = 0;
        for (auto i = m.begin(); i != m.end(); i ++ ) num ++;
        return min(candyType.size() / 2, num);
    }
};

最长和谐子序列


题目链接:最长和谐子序列

C++版AC代码:

class Solution {
public:
    int findLHS(vector<int>& nums) {
        unordered_map<int, int> m;
        for (int i = 0; i < nums.size(); i ++ ) m[nums[i]] ++;
        int res = 0;
        for (auto i = m.begin(); i != m.end(); i ++ ) {
            int k = i -> first;
            if (m.count(k + 1)) res = max(res, m[k] + m[k + 1]);
        }
        return res;
    }
};

两个列表的最小索引总和


题目链接:两个列表的最小索引总和

C++版AC代码:

class Solution {
public:
    vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
        vector<string> res;
        unordered_map<string, int> m;
        for (int i = 0; i < list1.size(); i ++ ) m[list1[i]] = i;
        int maxindex = 2000;        // 最大索引和
        for (int i = 0; i < list2.size(); i ++ ) {
            string k = list2[i];
            if (m.count(k) && i + m[k] <= maxindex) {
                maxindex = i + m[k];
            }            
        }
        for (int i = 0; i < list2.size(); i ++ ){
            string k = list2[i];
            if (m.count(k) && i + m[k] == maxindex)
                res.push_back(k);
        }
        return res;
    }
};

错误的集合


题目链接:错误的集合

C++版AC代码:

class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        unordered_map<int, int> m;
        int n = nums.size();
        for (int i = 0; i < n; i ++ ) m[nums[i]] ++;
        int lost, re;
        for (int i = 1; i <= n; i ++ ) {
            if (!m.count(i)) lost = i;
            if (m[i] == 2) re = i;
        }
        return {re, lost};
    }
};

两数之和 IV - 输入二叉搜索树


题目链接:两数之和 IV - 输入二叉搜索树

C++版AC代码:

emm,没有用到 BST,使用哈希的话 BST 这个条件貌似没有什么用处。

/**
 * 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 Solution {
public:
    unordered_map<int, int> m;
    void LNR(TreeNode* root){
        if (root == NULL) return;
        if (root -> left) LNR(root -> left);
        m[root -> val] ++;
        if (root -> right) LNR(root -> right);
    }
    bool findTarget(TreeNode* root, int k) {
        LNR(root);
        bool flag = false;
        for (auto i = m.begin(); i != m.end(); i ++ ) {
            int a = i -> first;
            if ((2 * a == k) && m[a] > 1) return true;
            if ((2 * a == k) && m[a] <= 1) continue;
            if (m.count(k - a)){
                flag = true;
                break;
            }
        }
        return flag;
    }
};

计算机考研复试面试常问问题数据结构.pdf是一份关于计算机考研复试中常见的数据结构问题集合的文档。在这份文档中,可能会涉及到以下几个方面的问题: 1. 数据结构的基本概念和分类:面试官可能会对你的数据结构基础进行考察,问你数据结构的定义、基本概念、常见的数据结构分类以及它们的特点等。 2. 数组、链表和栈的实现和应用:面试官可能会询问数组、链表和栈的基本实现方式,比如数组的特点、随机存取和顺序存储等,链表的特点和不同类型的链表,以及栈的实现和应用场景等。 3. 队列和树的实现和应用:面试官可能会问到队列和树的基本实现方式和应用场景。例如,队列的特点和实现方式、循环队列和链式队列的区别,二叉树和平衡二叉树的特点和应用等。 4. 图的基本概念和常见算法:面试官可能会询问图的基本概念,如有向图和无向图的概念及其区别,图的存储方式以及常见的图算法,如最短路径算法、深度优先搜索和广度优先搜索等。 在面试过程中,回答这些问题时应该尽量简明扼要,清晰明了地表达自己的观点。同时,可以结合实际案例或代码实现进行说明,以展示自己对数据结构的理解和应用能力。最后,还应积极与面试官进行沟通交流,回答问题时注意语言表达和思维逻辑的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值