leetcode算法总结 —— map存储数据

我们之所以使用map进行数据的存储,主要是因为:map的查找时间复杂度为O(1),而数组遍历的查找时间复杂度为O(n),所以我们可以使用空间换时间,在一些情况中使用map来代替数组遍历进行查找。

map概述

map是基于红黑树实现。红黑树作为一种自平衡二叉树,保障了良好的最坏情况运行时间,即它可以做到在O(log n)时间内完成查找,插入和删除,在对单次时间敏感的场景下比较建议使用map做为容器。比如实时应用,可以保证最坏情况的运行时间也在预期之内。
另红黑树是一种二叉查找树,二叉查找树一个重要的性质是有序,且中序遍历时取出的元素是有序的。对于一些需要用到有序性的应用场景,应使用map。

unordered_map是基于hash_table实现,hash_table最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间O(1);而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。

使用数组下标代替map(元素有限比较少,比如字母对应索引)

使用数组代替map主要是为了降低空间利用率。

    1. 有效的字母异位词
    1. 找不同
    1. 赎金信(完全同242)
    1. 拼写单词
  • 剑指 Offer 03. 数组中重复的数字
    1. 两个数组的交集(两个求交集)
    1. 查找常用字符(两个以上求交集)
  • 剑指 Offer 50. 第一个只出现一次的字符

set代替map

    1. 两个数组的交集
    1. 快乐数
    1. 宝石与石头
    1. 独一无二的出现次数

map

    1. 两数之和
    1. 两数之和 III - 数据结构设计
    1. 子域名访问计数(考察map以及字符串操作)
    1. 好数对的数目
    1. 找出变位映射
    1. 前五科的均分(自定义比较函数)
    1. 回文排列
    1. 两句话中的不常见单词(分割字符串)
    1. 常数时间插入、删除和获取随机元素

猜你喜欢

转载自blog.csdn.net/chongbin007/article/details/112425232