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

提交网站给百度国外优秀的html5网站

提交网站给百度,国外优秀的html5网站,网站建设 问卷调查,学校做网站方案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://www.yayakq.cn/news/401716/

相关文章:

  • 网站建设唐山赣州章贡区天气预报
  • 微信营销网站wordpress 5 开发
  • 对网站建设在电子商务中的看法企业百度推广怎么收费
  • 英文网站网站建设wordpress外贸网站源码
  • 自己开发网站怎么开发漯河企业网站开发
  • 哪些人可以做网站游戏分销代理平台
  • 个人站长还有什么类型的网站可以做驻马店网站建设价格
  • 物流网站建设哪个好上海十大黑心装修公司
  • 买国外空间哪个网站好可以发广告的网站
  • 站长工具樱花网站开发有哪几个阶段
  • 做网站找合作伙伴Wordpress怎么改成中文
  • 制作网站公司图片建设银行信用卡网站多少
  • 中国建设银行个人登陆网站每年网站备案抽查
  • wp如何做引擎网站wordpress 多备份
  • 营销型网站开发公司电话WordPress 卡密购买插件
  • 做黎川旅游网站的目的常州外贸网站
  • 网站设计原型图关于加强网站建设与管理的通知
  • 网站排名下降的原因哈尔滨高端网页设计
  • 我自己的网站 怎样做防火墙企业公示信息年报
  • 网站建设redu网站建设的构思
  • 站长工具网站推广域名备案网站服务内容
  • 做服装搭配图的网站有哪些房地产销售计划
  • 数据显示网站模板wordpress 短信
  • com网站域名羊毛网站建设视频
  • 专门做h5的网站做网站开发需要学那些东西
  • 做名片去哪个网站池州专业网站建设哪家好
  • 一级a做爰片免费网站迅雷下载aliyun oss wordpress
  • wordpress设置关站wordpress数据库安装失败
  • 无锡专业网站制作phpcms做视频网站首页
  • 网站建设培训 ppt世界各国足球联赛排名