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

海南省旅游专业网站发展电子商务缺乏强大的专业产业资源做后盾seo搜索排名优化公司

海南省旅游专业网站发展电子商务缺乏强大的专业产业资源做后盾,seo搜索排名优化公司,市通建设工程质量监督局网站,华为产品开发流程目录 1 148. 排序链表 2 23. 合并 K 个升序链表 3 146. LRU 缓存 3.1 解题思路 3.2 详细过程 3.3 完整代码 菜鸟做题第三周,语言是 C 1 148. 排序链表 解题思路: 遍历链表,把每个节点的 val 都存入数组中用 sort 函数对数组进…

目录

1  148. 排序链表

2  23. 合并 K 个升序链表

3  146. LRU 缓存

3.1  解题思路

3.2  详细过程

3.3  完整代码


菜鸟做题第三周,语言是 C++

1  148. 排序链表

解题思路:

  1. 遍历链表,把每个节点的 val 都存入数组中
  2. 用 sort 函数对数组进行排序
  3. 遍历链表,更新每个节点的 val
class Solution {
public:ListNode* sortList(ListNode* head) {ListNode * p = head;vector<int> vals;while (p) {vals.push_back(p->val);p = p->next;}sort(vals.begin(), vals.end());p = head;int i = 0;while (p) {p->val = vals[i];p = p->next;++i;}return head;}
};

2  23. 合并 K 个升序链表

解题思路:

  1. 遍历所有链表,把每个节点的 val 都存入数组中
  2. 用 sort 函数对数组进行排序
  3. 构造新的链表,并放入数组中的值
class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {vector<int> vals;int n = lists.size();if (n == 0) return nullptr;for (int i = 0; i < n; ++i) {ListNode * p = lists[i];while (p) {vals.push_back(p->val);p = p->next;}}sort(vals.begin(), vals.end());ListNode * dummy = new ListNode(0);ListNode * p = dummy;for (auto &val:vals) {ListNode * t = new ListNode(val);p->next = t;p = t;}return dummy->next;}
};

3  146. LRU 缓存

3.1  解题思路
  • 构造双向链表,用于表示某节点最近是否被使用
  • 构造哈希表,用于快速定位节点位置

Q:如何表示某节点最近是否被访问?

A:在我的解法中,将最近被使用的节点链在链表尾部。由此,越靠近头部的节点越少被使用。

Q:什么叫被使用?

A:被使用包含两种:最新被插入到链表中的节点、最新被访问的节点。

Q:为什么一定要构造双向链表?

A:哈希表中存储的是节点的地址,帮助我们快速定位。但是定位只能定位到节点本身,而不能定位到节点的前一个节点,因此使用单向链表将无法完成节点的删除。

3.2  详细过程

① 定义双向链表结构体

struct DListNode {int key, value;DListNode * prev, * next;DListNode() : key(0), value(0), prev(nullptr), next(nullptr) {}DListNode(int x, int y) : key(x), value(y), prev(nullptr), next(nullptr) {}
};

照抄力扣定义的结构体即可,只不过多了一个 prev 前向指针。

② 定义变量

int cap = 0, size = 0;
unordered_map<int, DListNode *> hashtable;
DListNode * head, * tail;
  • cap 表示缓存的容量,size 表示缓存目前被占用的量
  • hashtable 的键是节点的 key,值是节点的地址 DListNode *
  • head 和 tail 是虚拟节点,辅助节点的插入和删除

③ 定义函数

void addToTail(int key, int value) {DListNode * node = new DListNode(key, value);hashtable[key] = node;node->next = tail;node->prev = tail->prev;tail->prev->next = node;tail->prev = node;++size;
}void moveToTail(int key) {DListNode * node = hashtable[key];node->prev->next = node->next;node->next->prev = node->prev;--size;addToTail(key, hashtable[key]->value);
}void delHeadNode() {DListNode * node = head->next;node->next->prev = head;head->next = node->next;delete node;
}
  • addToTail:是指在链尾插入新的节点
  • moveToTail:是指将最近使用到的节点删除,再插入到链尾
  • delHeadNode:是指缓存空间不够时,删除头节点

由于在我的解法中 “越靠近头部的节点越少被使用”,所以每次被替换掉的是头节点。

3.3  完整代码
class LRUCache {
public:struct DListNode {int key, value;DListNode * prev, * next;DListNode() : key(0), value(0), prev(nullptr), next(nullptr) {}DListNode(int x, int y) : key(x), value(y), prev(nullptr), next(nullptr) {}};int cap = 0, size = 0;unordered_map<int, DListNode *> hashtable;DListNode * head, * tail;LRUCache(int capacity) {cap = capacity;head = new DListNode();tail = new DListNode();head->next = tail;tail->prev = head;}int get(int key) {if (hashtable.count(key)) {moveToTail(key);return hashtable[key]->value;}return -1;}void put(int key, int value) {if (hashtable.count(key)) {hashtable[key]->value = value;moveToTail(key);} else if (!hashtable.count(key)) {if (size < cap) {addToTail(key, value);} else if (size >= cap) {hashtable.erase(head->next->key);delHeadNode();addToTail(key, value);}}}void addToTail(int key, int value) {DListNode * node = new DListNode(key, value);hashtable[key] = node;node->next = tail;node->prev = tail->prev;tail->prev->next = node;tail->prev = node;++size;}void moveToTail(int key) {DListNode * node = hashtable[key];node->prev->next = node->next;node->next->prev = node->prev;--size;addToTail(key, hashtable[key]->value);}void delHeadNode() {DListNode * node = head->next;node->next->prev = head;head->next = node->next;delete node;}
};

http://www.khdw.cn/news/37634.html

相关文章:

  • 软件定制网沈阳seo关键词排名优化软件
  • 中国住建部和城乡建设官网搜索引擎推广seo
  • 北京哪个公司做网站好nba交易最新消息
  • 宝塔做的网站网页打不开打开百度一下的网址
  • 重庆建站费用百度问答入口
  • 怎么制作网站视频播放器农村电商平台有哪些
  • 重庆简易注销在什么网站做营销型网站seo
  • 化妆品网站建设方案的预算企业网站设计图片
  • 做断桥铝最知名的网站百度seo最成功的优化
  • 网站维护平台常用的网络营销平台有哪些
  • 想自己做个网站怎么做石家庄网站建设方案
  • 管理战略咨询公司武汉网站运营专业乐云seo
  • 网站开发做原型吗html静态网页制作
  • 自己设计网站乔拓云网站注册
  • 网站建设师灯塔网站seo
  • ui作品集 网站怎么做长沙市最新疫情
  • 南山网站设计公司百度推广收费多少
  • 南通网站制作专家今天最新疫情情况
  • 西安做网站建设哪家好企业营销策划书如何编写
  • 大连企业网站建设网站网址大全
  • 网站开发者工作描述坚持
  • 网站建设与网页设计总结东莞企业推广网站制作
  • 培训网站建设公司2023年6月份又封城了
  • 湖南城市建设技术学院官方网站可以免费领取会员的软件
  • 做网站交易装备可以么外贸推广平台哪个好
  • 网站编辑岗位企业如何进行网络营销
  • 浮动播放器wordpress优化推广网站怎么做最好
  • 360建站abc如何自己开发软件app
  • 市场营销策划方案模板window优化大师官网
  • jsp动态网站开发实例教程站长工具传媒