复试 || 就业day04(2023.12.30)算法篇

发布时间:2023年12月30日

前言

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

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

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

两个数组的交集


题目链接:两个数组的交集

C++版AC代码:

基础哈希,注意题目要求对于重复出现的元素保留一次

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res;
        unordered_map<int, int> m;
        unordered_map<int, bool> rem;
        for (int i = 0; i < nums1.size(); i ++ ) 
            m[nums1[i]] = 1, rem[nums1[i]] = true;
        for (int i = 0; i < nums2.size(); i ++ ) 
            if (m[nums2[i]] != 0 && rem[nums2[i]]){
                res.push_back(nums2[i]);
                rem[nums2[i]] = false;
            }
        return res;
    }
};

两个数组的交集 II


题目链接:两个数组的交集 II

C++版AC代码:

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int, int> m1, m2;
        vector<int> res;
        for (int i = 0; i < nums1.size(); i ++ ) m1[nums1[i]] ++;
        for (int i = 0; i < nums2.size(); i ++ ) m2[nums2[i]] ++;
        for (auto i = m1.begin(); i != m1.end(); i ++){
            int k = i -> first;
            if (m2.find(k) != m2.end()){
                int num = min(m1[k], m2[k]);
                while (num -- ) res.push_back(k);
            }
        }
        return res;
    }
};

赎金信


题目链接:赎金信

C++版AC代码:

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map<char, int> ran, mag;
        for (int i = 0; i < ransomNote.size(); i ++ ) ran[ransomNote[i]] ++;
        for (int i = 0; i < magazine.size(); i ++ ) mag[magazine[i]] ++;
        for (auto i = ran.begin(); i != ran.end(); i ++ ){
            char k = i -> first;
            if (ran[k] > mag[k]) return false;
        }
        return true;
    }
};

字符串中的第一个唯一字符


题目链接:字符串中的第一个唯一字符

C++版AC代码:

class Solution {
public:
    int firstUniqChar(string s) {
        unordered_map<char ,int> m;
        for (int i = 0; i < s.size(); i ++ ) m[s[i]] ++;
        for (int i = 0; i < s.size(); i ++ )
            if (m[s[i]] == 1) return i;
        return -1;
    }
};

文章来源:https://blog.csdn.net/qq_52156445/article/details/135307971
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。