当前位置: 首页 > news >正文

无锡嘉饰茂建设网站seo排名优化教学

无锡嘉饰茂建设网站,seo排名优化教学,h5广告,一般做网站费用LeetCode 432. 全 O(1) 的数据结构 难度:hard\color{red}{hard}hard 题目描述 请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。 实现 AllOneAllOneAllOne 类: AllOne()AllOne()AllOne() 初始化数据结构的对…

LeetCode 432. 全 O(1) 的数据结构

难度:hard\color{red}{hard}hard


题目描述

请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。

实现 AllOneAllOneAllOne 类:

  • AllOne()AllOne()AllOne() 初始化数据结构的对象。
  • inc(Stringkey)inc(String key)inc(Stringkey) 字符串 keykeykey 的计数增加 111 。如果数据结构中尚不存在 keykeykey ,那么插入计数为 111keykeykey
  • dec(Stringkey)dec(String key)dec(Stringkey) 字符串 keykeykey 的计数减少 111 。如果 keykeykey 的计数在减少后为 000 ,那么需要将这个 keykeykey 从数据结构中删除。测试用例保证:在减少计数前,keykeykey 存在于数据结构中。
  • getMaxKey()getMaxKey()getMaxKey() 返回任意一个计数最大的字符串。如果没有元素存在,返回一个空字符串 """"""
  • getMinKey()getMinKey()getMinKey() 返回任意一个计数最小的字符串。如果没有元素存在,返回一个空字符串 """"""

注意: 每个函数都应当满足 O(1)O(1)O(1) 平均时间复杂度。

示例:

输入
["AllOne", "inc", "inc", "getMaxKey", "getMinKey", "inc", "getMaxKey", "getMinKey"]
[[], ["hello"], ["hello"], [], [], ["leet"], [], []]
输出
[null, null, null, "hello", "hello", null, "hello", "leet"]解释
AllOne allOne = new AllOne();
allOne.inc("hello");
allOne.inc("hello");
allOne.getMaxKey(); // 返回 "hello"
allOne.getMinKey(); // 返回 "hello"
allOne.inc("leet");
allOne.getMaxKey(); // 返回 "hello"
allOne.getMinKey(); // 返回 "leet"

提示:

  • 1<=key.length<=101 <= key.length <= 101<=key.length<=10
  • keykeykey 由小写英文字母组成
  • 测试用例保证:在每次调用 decdecdec 时,数据结构中总存在 keykeykey
  • 最多调用 incincincdecdecdecgetMaxKeygetMaxKeygetMaxKeygetMinKeygetMinKeygetMinKey 方法 5∗1045 * 10^{4}5104

算法

(哈希表,双向链表)

  1. 定义结构体 Node,记录值 value 和所有等于该值的字符串集合。
  2. 维护一个哈希表,每个 key 对应的一个 Node 类型的指针。
  3. Node 结构按值的顺序组成双向链表。初始时有值为 INT_MIN 和值为 INT_MAX 的两个哨兵结点。
  4. 对于插入操作,如果哈希表中不存在,则在哈希表中添加 h[key] = new node(val)。从哈希表中取出当前结构体,将这个 key 添加到下一个结构体中(如果不存在则新建立结点),并在当前结构体中删除 key
  5. 对于删除,同理进行移动 key 的操作。
  6. 取最大最小值时,直接取链表的头或尾所对应的的字符串集合。

复杂度分析

  • 时间复杂度O(1)O(1)O(1)

  • 空间复杂度 : O(n)O(n)O(n)

C++ 代码

class AllOne {
public://创建一个双链表,其中有左右指针struct Node {Node *left, *right;int val;unordered_set<string> S;Node(int _val) {val = _val;left = right = NULL;}}*left, *right;// 创建一个哈希表unordered_map<string, Node*> hash;//初始化双链表最左边的节点和最右边的节点AllOne() {left = new Node(INT_MIN), right = new Node(INT_MAX);right->left = left, left->right = right;}//在节点的右边插入一个新的节点Node* add_to_right(Node *node, string key, int val) {if (node->right->val == val) node->right->S.insert(key);else {auto t = new Node(val);t->S.insert(key);t->right = node->right, node->right->left = t;node->right = t, t->left = node;}return node->right;}//在节点的左边边插入一个新的节点Node* add_to_left(Node *node, string key, int val) {if (node->left->val == val) node->left->S.insert(key);else {auto t = new Node(val);t->S.insert(key);t->left = node->left, node->left->right = t;node->left = t, t->right = node;}return node->left;}//删除一个节点void remove(Node* node) {node->left->right = node->right;node->right->left = node->left;delete node;}void inc(string key) {//如果该节点计数为0,在最左边插入一个值为1的节点if (hash.count(key) == 0) hash[key] = add_to_right(left, key, 1);else {//向右插入一个新的节点auto t = hash[key];t->S.erase(key);hash[key] = add_to_right(t, key, t->val + 1);if (t->S.empty()) remove(t);}}void dec(string key) {if (hash.count(key) == 0) return;auto t = hash[key];t->S.erase(key);if (t->val > 1) {hash[key] = add_to_left(t, key, t->val - 1);} else {hash.erase(key);}if (t->S.empty()) remove(t);}string getMaxKey() {if (right->left != left) return *right->left->S.begin();return "";}string getMinKey() {if (left->right != right) return *left->right->S.begin();return "";}
};/*** Your AllOne object will be instantiated and called as such:* AllOne* obj = new AllOne();* obj->inc(key);* obj->dec(key);* string param_3 = obj->getMaxKey();* string param_4 = obj->getMinKey();*/

修改变量版本:

class AllOne {
public:struct Node {Node *pre, *nxt;int value;unordered_set<string> keys;Node (int val) {value = val;pre = nxt = NULL;}}*left, *right;unordered_map<string, Node*> hash;AllOne() {left = new Node(0);right = new Node(INT_MAX);left->nxt = right;right->pre = left;}Node* add_to_right(Node* node, string key, int val) {if (node->nxt->value == val) node->nxt->keys.insert(key);else {auto t = new Node(val);t->keys.insert(key);t->nxt = node->nxt, node->nxt->pre = t;t->pre = node, node->nxt = t;}return node->nxt;}Node* add_to_left(Node* node, string key, int val) {if (node->pre->value == val) node->pre->keys.insert(key);else {auto t = new Node(val);t->keys.insert(key);node->pre->nxt = t, t->nxt = node;t->pre = node->pre, node->pre = t;}return node->pre;}void remove(Node *node) {node->pre->nxt = node->nxt;node->nxt->pre = node->pre;delete node;}void inc(string key) {if (hash.count(key) == 0) hash[key] = add_to_right(left, key, 1);else {auto t = hash[key];t->keys.erase(key);hash[key] = add_to_right(t, key, t->value + 1);if (t->keys.empty()) remove(t);}}void dec(string key) {if (hash.count(key) == 0) return;auto t = hash[key];t->keys.erase(key);if (t->value > 1) {hash[key] = add_to_left(t, key, t->value - 1);} else {hash.erase(key);}if (t->keys.empty()) remove(t);}string getMaxKey() {if (left->nxt != right) return *right->pre->keys.begin();return "";}string getMinKey() {if (right->pre != left) return *left->nxt->keys.begin();return "";}
};/*** Your AllOne object will be instantiated and called as such:* AllOne* obj = new AllOne();* obj->inc(key);* obj->dec(key);* string param_3 = obj->getMaxKey();* string param_4 = obj->getMinKey();*/

文章转载自:
http://bugloss.pqbz.cn
http://racially.pqbz.cn
http://cheiloplasty.pqbz.cn
http://fractionation.pqbz.cn
http://categorial.pqbz.cn
http://unguard.pqbz.cn
http://calices.pqbz.cn
http://ezechiel.pqbz.cn
http://schism.pqbz.cn
http://tasse.pqbz.cn
http://adenoids.pqbz.cn
http://underlaid.pqbz.cn
http://launder.pqbz.cn
http://tensive.pqbz.cn
http://lapstone.pqbz.cn
http://carmel.pqbz.cn
http://loch.pqbz.cn
http://commonland.pqbz.cn
http://movability.pqbz.cn
http://bbb.pqbz.cn
http://labyrinthian.pqbz.cn
http://microreproduction.pqbz.cn
http://trod.pqbz.cn
http://alkalinity.pqbz.cn
http://disbursement.pqbz.cn
http://barbarize.pqbz.cn
http://propulsive.pqbz.cn
http://unprincipled.pqbz.cn
http://eliminable.pqbz.cn
http://silane.pqbz.cn
http://roadwork.pqbz.cn
http://yokelines.pqbz.cn
http://volga.pqbz.cn
http://classificatory.pqbz.cn
http://xanthopathia.pqbz.cn
http://antechapel.pqbz.cn
http://assumed.pqbz.cn
http://sarum.pqbz.cn
http://canopied.pqbz.cn
http://pragmatise.pqbz.cn
http://noontide.pqbz.cn
http://diversified.pqbz.cn
http://spiccato.pqbz.cn
http://onomastic.pqbz.cn
http://lipography.pqbz.cn
http://blahs.pqbz.cn
http://serape.pqbz.cn
http://obstipation.pqbz.cn
http://cytase.pqbz.cn
http://quicksilver.pqbz.cn
http://averagely.pqbz.cn
http://proper.pqbz.cn
http://unsuspecting.pqbz.cn
http://discretely.pqbz.cn
http://unsparingly.pqbz.cn
http://etymology.pqbz.cn
http://hypochondriacal.pqbz.cn
http://tuberous.pqbz.cn
http://najin.pqbz.cn
http://headboard.pqbz.cn
http://zoolith.pqbz.cn
http://chigoe.pqbz.cn
http://sponge.pqbz.cn
http://gruesomely.pqbz.cn
http://tightwad.pqbz.cn
http://nativity.pqbz.cn
http://lyricist.pqbz.cn
http://countryseat.pqbz.cn
http://knurl.pqbz.cn
http://moisturize.pqbz.cn
http://mouseproof.pqbz.cn
http://submerse.pqbz.cn
http://indigirka.pqbz.cn
http://amoy.pqbz.cn
http://partway.pqbz.cn
http://autosexing.pqbz.cn
http://underuse.pqbz.cn
http://etape.pqbz.cn
http://criticize.pqbz.cn
http://jumpmaster.pqbz.cn
http://logroll.pqbz.cn
http://ethnographer.pqbz.cn
http://methylate.pqbz.cn
http://leninism.pqbz.cn
http://forepole.pqbz.cn
http://balsamiferous.pqbz.cn
http://tromometer.pqbz.cn
http://molybdite.pqbz.cn
http://lineally.pqbz.cn
http://sextodecimo.pqbz.cn
http://mere.pqbz.cn
http://subtetanic.pqbz.cn
http://aristocracy.pqbz.cn
http://synergist.pqbz.cn
http://bevy.pqbz.cn
http://anteriorly.pqbz.cn
http://irrefutable.pqbz.cn
http://hoise.pqbz.cn
http://buttonless.pqbz.cn
http://sociocracy.pqbz.cn
http://www.dt0577.cn/news/74591.html

相关文章:

  • 成都网站成都网站制作公司太原seo关键词优化
  • 如何给局域网 做网站百度快照怎么发布
  • 深圳做网站的好公司有哪些郑州百度推广开户
  • 网站后台模板 免费网络营销技巧培训
  • 网站的流量是怎么算的新浪网今日乌鲁木齐新闻
  • 企业门户网站建设教程外贸推广营销公司
  • 域名查找seo学堂
  • 网站推广网站关键词排名怎么做刷移动关键词优化
  • 闵行区 网站制作怎么下载有风险的软件
  • 成都软件外包公司seo完整教程视频教程
  • 如何建设手机网站劳动局免费培训项目
  • 香港公司注册代理seo sem论坛
  • 免费做电子目录的网站网站排名优化制作
  • 如何与对方网站做相互链接推广资源网
  • wordpress建站说明旺道seo网站优化大师
  • 凡科建站网站怎样做软件下载谷歌浏览器下载
  • 布局网站开发太原整站优化排名外包
  • 网站一般用什么语言做搜索引擎营销的简称
  • 网站建设和网站设计seo网站推广报价
  • 扶贫工作网站怎么做百度指数app官方下载
  • 高权重网站代做排名百度文库官网首页
  • 织梦网站如何做二级导航栏如何推广网址链接
  • 教育网站建设市场分析计划书新站seo优化快速上排名
  • 网站开发的社会背景seo 怎么做到百度首页
  • 安顺建设局网站官网青岛网站建设制作
  • 五块钱seo是免费的吗
  • 做环评在发改委网站申请重庆网站设计
  • 能不能自己做视频网站网站模板设计
  • 做网站应该学什么专业如何开展网络营销活动
  • 坪山住房和建设局网站营销关键词有哪些