网站开发与设计案例,网站的设计与维护摘要,wordpress文章倒序,电商平台倒闭哈希表
哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_#xff0c;完成映射操作#xff0c;主要是相应的函数。map和set是有序的#xff0c;使用的是树的形式#xff0c;unordered_map和unordered_set使用的是散列比表的#xff0c;无序。
相应函数…哈希表
哈希表主要是使用 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(vectorint nums) {mapint,int d;for(int i0;inums.size();i){d[nums[i]];if(d[nums[i]]nums.size()/2){return nums[i];}}return 0;}};罗马数字转整数 只根据规定的格式进行匹配
class Solution {
public:int romanToInt(string s) {mapchar,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;is.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(lastC(s[i]D| s[i]M)){sum-200;last ;}else{last s[i];}}return sum;}
};整数转罗马数字 直接暴力if eiseif绷不住了
class Solution {
public:string intToRoman(int num) {mapint,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 nnum;while(n0){if(n/1000){s.push_back(d[1000]);n-1000;}else if(n/500){if(n900){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(n400){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(n90){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(n40){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(n9){s.push_back(d[1]);s.push_back(d[10]);n-9;}else{n-5;s.push_back(d[5]);}}else{if(n4){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:vectorstring letterCombinations(string digits) {mapint,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;vectorstring data;for(int i0;idigits.length();i){vectorstring d;ddata;data.clear();string digi m[digits[i]];for(int j0;jdigi.length();j){if(d.empty()){string aaa;aaadigi[j];data.push_back(aaa); }else{for(int h0;hd.size();h){data.push_back(d[h]digi[j]);}} }}return data;}
};存在重复元素 就一个集合解决
class Solution {
public:bool containsDuplicate(vectorint nums) {setint data;for(int i0;inums.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(vectorint nums, int k) {mapint,int m;for(int i0;inums.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;}
};