备战春招——12.04 算法

哈希表

哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_,完成映射操作,主要是相应的函数。map和set是有序的,使用的是树的形式,unordered_map和unordered_set使用的是散列比表的,无序。

相应函数

set multiset

相应的地址

map multimap

相应地址

unordered_map unordered_multimap

相应位置

unordered_set unordered_multiset

相应地址

刷题

多数元素

在这里插入图片描述
最朴素的方法,map统计,绷不住了,嘎嘎嘎

class Solution {
   
public:
    int majorityElement(vector<int>& nums) {
   
        map<int,int> d;
        for(int i=0;i<nums.size();i++){
   
            d[nums[i]]++;
            if(d[nums[i]]>nums.size()/2){
   
                return nums[i];
            }
        }
        return 0;
    }

};

罗马数字转整数

在这里插入图片描述
只根据规定的格式进行匹配

class Solution {
   
public:
    int romanToInt(string s) {
   
        map<char,int> d;
        d['I'] = 1;
        d['V'] = 5;
        d['X'] = 10;
        d['L'] = 50;
        d['C'] = 100;
        d['D'] = 500;
        d['M'] = 1000;
        char last;
        int sum = 0; 
        for(int i =0;i<s.length();i++){
   
            sum += d[s[i]];
      
            if(last == 'I'&&(s[i]=='V'| s[i]=='X')){
   
                sum-=2;
                last = ' ';
             
            } else if(last == 'X'&& (s[i]=='L'| s[i]=='C')){
   
                    sum-=20;
                    last = ' ';
            
            }else if(last=='C'&&(s[i]=='D'| s[i]=='M')){
   
                    sum-=200;
                    last = ' ';
            }else{
   
                      last = s[i];
            }
        }
        return sum;
    }
};

整数转罗马数字

在这里插入图片描述
直接暴力if eiseif,绷不住了

class Solution {
   
public:
    string intToRoman(int num) {
   
        map<int,char> d;
        d[1]  = 'I';
        d[5] = 'V';
        d[10] = 'X';
        d[50] = 'L' ;
        d[100] ='C';
        d[500] = 'D';
        d[1000] = 'M' ;
        string s;
       int  n=num;
        while(n>0){
   
            if(n/1000){
   
                s.push_back(d[1000]);
                n-=1000;
            }else if(n/500){
   
                if(n>=900){
   
                    s.push_back(d[100]);
                    s.push_back(d[1000]);
                    n-=900;
                }else{
   
                    s.push_back(d[500]);
                    n-=500;
                }
            }else if(n/100){
   
                if(n>=400){
   
                    s.push_back(d[100]);
                    s.push_back(d[500]);
                    n-=400;
                }else{
   
                    s.push_back(d[100]);
                    n-=100;
                }
            }else if(n/50){
   
                if(n>=90){
   
                    s.push_back(d[10]);
                    s.push_back(d[100]);
                    n-=90;
                }else{
   
                    s.push_back(d[50]);
                    n-=50;
                }
            }else if(n/10){
   
                if(n>=40){
   
                    s.push_back(d[10]);
                    s.push_back(d[50]);
                    n-=40;
                }else{
   
                    n-=10;
                    s.push_back(d[10]);
                }
            }else if(n/5){
   
                 if(n>=9){
   
                    s.push_back(d[1]);
                    s.push_back(d[10]);
                    n-=9;
                }else{
   
                    n-=5;
                    s.push_back(d[5]);
                }
            }else{
   
                  if(n>=4){
   
                    s.push_back(d[1]);
                    s.push_back(d[5]);
                    n-=4;
                }else{
   
                    n-=1;
                    s.push_back(d[1]);
                }
            }
        }
        return s;
    }
};

电话号码的字母组合

在这里插入图片描述
就是暴力,emm,题解挺简单的,用一个map存储映射,然后开始暴力操作。

class Solution {
   
public:
    vector<string> letterCombinations(string digits) {
   
        map<int,string> m;
        m['2']="abc";
        m['3']="def";
        m['4']="ghi";
        m['5']="jkl";
        m['6']="mno";
        m['7']="pqrs";
        m['8']="tuv";
        m['9']="wxyz";
        vector<string> data;
        for(int i=0;i<digits.length();i++){
   
            vector<string> d;
            d=data;
            data.clear();
            string digi = m[digits[i]];
            for(int j=0;j<digi.length();j++){
   
                if(d.empty()){
   
                    string aaa;
                    aaa+=digi[j];
                   data.push_back(aaa); 
                }else{
   
                    for(int h=0;h<d.size();h++){
   
                        data.push_back(d[h]+digi[j]);
                    }
            
                }  
             }
        }
        return data;
    }
};

存在重复元素

在这里插入图片描述
就一个集合解决

class Solution {
   
public:
    bool containsDuplicate(vector<int>& nums) {
   
        set<int> data;
        for(int i=0;i<nums.size();i++){
   
            if(data.find(nums[i])==data.end()){
   
                data.insert(nums[i]);
            }else{
   
                return true;
            }
        }
        return false;
    }
};

重复元素2

在这里插入图片描述

用一个映射存储数据,直接遍历,可能某个元素会出现多此,所以需要进行一个map位置的实时更新。

class Solution {
   
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
   
        map<int,int> m;
        for(int i=0;i<nums.size();i++){
   
            if(m.find(nums[i])!=m.end()){
   
                if((i-m[nums[i]])<=k){
   
                    return true;
                }else{
   
                    m[nums[i]]=i;
                }
            }else{
   
                m[nums[i]]=i;
            }
        }
        return false;
    }
};

相关推荐

  1. 国金证券算法岗面试

    2023-12-05 16:06:02       22 阅读
  2. 问题总结

    2023-12-05 16:06:02       21 阅读
  3. 360笔试题

    2023-12-05 16:06:02       19 阅读
  4. 百度机器学习算法一二三面面经

    2023-12-05 16:06:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 16:06:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 16:06:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 16:06:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 16:06:02       18 阅读

热门阅读

  1. dialog打开时重新渲染

    2023-12-05 16:06:02       42 阅读
  2. .NET8 依赖注入

    2023-12-05 16:06:02       34 阅读
  3. 服务器是否稳定怎么看

    2023-12-05 16:06:02       40 阅读
  4. entos定时自动备份mysql

    2023-12-05 16:06:02       35 阅读
  5. conda和pip常用命令整理

    2023-12-05 16:06:02       41 阅读
  6. 1292:宠物小精灵之收服

    2023-12-05 16:06:02       30 阅读
  7. CentOS7 防火墙常用命令

    2023-12-05 16:06:02       36 阅读
  8. 1022. 宠物小精灵之收服,二维花费的背包

    2023-12-05 16:06:02       35 阅读
  9. 14.Oracle中RegExp_Like 正则表达式基本用法

    2023-12-05 16:06:02       33 阅读
  10. 单元测试一(理论)-云计算2023.11-云南农业大学

    2023-12-05 16:06:02       37 阅读
  11. Kubernetes 常用命令

    2023-12-05 16:06:02       35 阅读
  12. [Python] 将文字转化到图片上显示

    2023-12-05 16:06:02       43 阅读