网站反链接是什么意思网站开始怎么做的

news/2025/9/22 17:34:30/文章来源:
网站反链接是什么意思,网站开始怎么做的,永年网站建设,设计方案包括哪几部分目录 归并排序详解 递归实现 迭代实现 面试题 77 : 链表排序 面试题 78 : 合并排序链表 法一、利用最小堆选取值最小的节点 法二、按照归并排序的思路合并链表 归并排序详解 归并排序就是将两个或两个以上的有序表合并成一个有序表的过程。将两个有序表合并成一个有序表…目录 归并排序详解 递归实现 迭代实现 面试题 77 : 链表排序 面试题 78 : 合并排序链表 法一、利用最小堆选取值最小的节点 法二、按照归并排序的思路合并链表 归并排序详解 归并排序就是将两个或两个以上的有序表合并成一个有序表的过程。将两个有序表合并成一个有序表的过程称为 2-路归并。 归并排序算法的思想是假设初始列表含有 n 个记录则可看成 n 个有序的子序列每个子序列的长度为 1然后两两归并得到 个长度为 2 或 1 的有序子序列再两两归并··· ···如此重复直至得到一个长度为 n 的有序序列为止。 递归实现 class Solution { public:vectorint sortArray(vectorint nums) {int n nums.size();vectorint tmp(n);mergeSort(nums, tmp, 0, n - 1);return nums;} private:void mergeSort(vectorint nums, vectorint tmp, int left, int right) {if (left right)return;int mid (left right) / 2;mergeSort(nums, tmp, left, mid);mergeSort(nums, tmp, mid 1, right); ​// 合并相邻的两个有序子序列 nums[left···mid] 和 nums[mid1···right]int i left, j mid 1, k left;while (i mid j right){if (nums[i] nums[j])tmp[k] nums[i];elsetmp[k] nums[j];}while (i mid){tmp[k] nums[i];}while (j right){tmp[k] nums[j];} ​for (int i left; i right; i){nums[i] tmp[i];}} }; 迭代实现 class Solution { public:vectorint sortArray(vectorint nums) {int n nums.size();vectorint tmp(n);for (int seg 1; seg n; seg * 2){for (int left 0; left n; left 2 * seg){int mid min(left seg - 1, n - 1);int right min(left 2 * seg - 1, n - 1);int i left, j mid 1, k left;while (i mid j right){if (nums[i] nums[j])tmp[k] nums[i];elsetmp[k] nums[j];}while (i mid){tmp[k] nums[i];}while (j right){tmp[k] nums[j];}}nums tmp;}return nums;} }; 由于长度为 n 的数组每次都被分为两个长度为 n/2 的数组因此不管输入什么样的数组归并排序的时间复杂度都是 O(nlog)。归并排序需要创建一个长度为 n 的辅助空间。如果用递归实现归并排序那么递归的调用栈需要 O(logn) 的空间。因此归并排序的空间复杂度是 O(n)。 手写归并排序的代码本身就是很常见的面试题因此应聘者应深刻理解归并排序的过程熟悉归并排序的迭代和归并的代码实现。同时归并排序是应用分治法来解决问题的类似的思路可以用来解决很多其他的问题。 面试题 77 : 链表排序 题目 输入一个链表的头节点请将该链表排序。例如输入下图 (a) 中的链表该链表排序后如下图 (b) 所示。 分析 可以使用归并排序对链表进行排序其主要思想是将链表分成两个子链表在对两个子链表排序之后再将它们合并成一个排序的链表。排序子链表和排序整个链表是同一个问题可以递归调用同一个函数解决。 class Solution { public:ListNode* sortList(ListNode* head) {if (head nullptr || head-next nullptr)return head;ListNode* head1 head;ListNode* head2 split(head); ​head1 sortList(head1);head2 sortList(head2); ​return merge(head1, head2);} private:ListNode* split(ListNode* head) {ListNode* slow head;ListNode* fast head-next;while (fast fast-next){slow slow-next;fast fast-next-next;}ListNode* secondHead slow-next;slow-next nullptr;return secondHead;} ​ListNode* merge(ListNode* head1, ListNode* head2) {ListNode* dummy new ListNode;ListNode* cur dummy;while (head1 head2){if (head1-val head2-val){cur-next head1;head1 head1-next;}else{cur-next head2;head2 head2-next;}cur cur-next;}cur-next head1 ! nullptr ? head1 : head2;return dummy-next;} }; 函数 split 将链表分成前后两半并返回后半部分链表的头节点。 可以用快慢指针的思路将链表分成前后两半其中慢指针一次走一步快指针一次走两步。 如果链表的节点总数为偶数那么当快指针走到链表的尾节点时慢指针正好走到前半段链表的最后一个节点前半段链表和后半段链表的节点个数相同。 如果链表的节点总数为奇数那么当快指针走到空时慢指针也正好走到前半段链表的最后一个节点前半段链表比后半段链表多一个节点。 函数 merge 用来合并两个排序的子链表并返回合并后的排序链表的头节点。 和合并两个排序的子数组类似也可以用两个指针分别指向两个排序子链表的节点然后选择其中值较小的节点。与合并数组不同的是不需要另一个链表来保存合并之后的节点而只需要调整指针的指向。 面试题 78 : 合并排序链表 题目 输入 k 个排序的链表请将它们合并成一个排序的链表。例如输入 3 个排序的链表如下图 (a) 所示将它们合并之后得到的排序的链表如下图 (b) 所示。 法一、利用最小堆选取值最小的节点 用 k 个指针分别指向这 k 个链表的头节点从这 k 个节点中选取值最小的节点。然后将指向值最小的节点的指针向后移动一步再比较 k 个指针指向的节点并选取值最小的节点。重复这个过程直到所有节点都被选取出来。 这思路需要反复比较 k 个节点并选取值最小的节点。既可以每次都用一个 for 循环用 O(k) 的时间复杂度比较 k 个节点的值也可以将 k 个节点放入一个最小堆中位于堆顶的节点就是值最小的节点。每当选取某个值最小的节点之后将它从堆中删除并将它的下一个节点添加到堆中。从最小堆中得到位于堆顶的节点的时间复杂度是 O(1)堆的删除和插入操作的时间复杂度是 O(logk)因此使用最小堆比直观地用 for 循环的时间效率高。 struct Greater {bool operator()(const ListNode* lhs, const ListNode* rhs){return lhs-val rhs-val;} }; ​ class Solution { public:ListNode* mergeKLists(vectorListNode* lists) {ListNode* dummy new ListNode;ListNode* cur dummy; ​priority_queueListNode*, vectorListNode*, Greater minHeap;for (ListNode* head : lists){if (head)minHeap.push(head);} ​while (!minHeap.empty()){cur-next minHeap.top();minHeap.pop();cur cur-next;if (cur-next)minHeap.push(cur-next);}return dummy-next;} }; 假设 k 个排序链表总共有 n 个节点。如果堆的大小为 k那么空间复杂度就是 O(k)。每次用最小堆处理一个节点需要 O(logk) 的时间因此这种解法的时间复杂度是 O(nlogk)。 法二、按照归并排序的思路合并链表 下面换一种思路来解决这个问题。输入的 k 个排序链表可以分成两部分前 k/2 个链表和后 k/2 个链表。如果将前 k/2 个链表和后 k/2 个链表分别合并成两个排序的链表再将这两个排序的链表合并那么所有链表都合并了。合并 k/2 个链表与合并 k 个链表是同一个问题可以调用递归函数解决。 class Solution { public:ListNode* mergeKLists(vectorListNode* lists) {if (lists.size() 0)return nullptr;return mergeTwoList(lists, 0, lists.size() - 1);} private:ListNode* mergeTwoList(vectorListNode* lists, int left, int right) {if (left right)return lists[left];int mid (left right) / 2;ListNode* head1 mergeTwoList(lists, left, mid);ListNode* head2 mergeTwoList(lists, mid 1, right); ​ListNode* dummy new ListNode;ListNode* cur dummy;while (head1 head2){if (head1-val head2-val){cur-next head1;head1 head1-next;}else{cur-next head2;head2 head2-next;}cur cur-next;}cur-next head1 ! nullptr ? head1 : head2;return dummy-next;} };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广东手机网站开发多少坑梓网站建设代理商

题目描述 Description现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可…

盱眙在仕德伟做网站的有几家wordpress 改相对路径

Yaf 结合用户自定义的视图(模板)引擎Smarty(Yaf Smarty)来源:互联网作者:佚名时间:2015-08-06 07:55对完成某个任务进行计时可使用progress_timer类,这个类对象在退出作用范围后,会输出对象创建后过去的时间&#xff…

自己怎么做网站啊长春市防疫最新规定

在 node 环境中,有两个内置的全局变量无需引入即可直接使用,并且无处不见,它们构成了 nodejs 的模块体系: module 与 require。以下是一个简单的示例const fs require(fs)const add (x, y) > x ymodule.exports add虽然它们在平常使用…

Gentoo安装配置

Gentoo安装配置如何在VMware虚拟机中安装Gentoo Linux 环境准备 - 内存:4G - 硬盘:30G - CPU:4核 - 启动方式:UEFI- 显示:打开3D加速,有些桌面环境,例如Hyprland需要启用安装镜像以及stage文件下载链接 最小安装介质…

当写脚本循环更新几百万数据发现很慢怎么办 - 孙龙

当写脚本循环更新几百万数据发现很慢怎么办1. 核心逻辑:CASE WHEN条件更新UPDATE table SET order_items_id = CASE WHEN stock_out_item_id = 1 THEN 100WHEN stock_out_item_id = 2 THEN 200ELSE order_items_id E…

2025年9月Java后端招聘市场技术风向标:666份招聘数据深度解读

2025年9月Java后端招聘市场技术风向标:666份招聘数据深度解读作为一名开发者或技术决策者,你是否想知道当前企业最需要什么技术?为了回答这个问题,我们分析了2025年9月从BOSS直聘平台收集的666份Java后端开发相关的…

服装采购跟单系统的高效管理实践 - 详解

服装采购跟单系统的高效管理实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

和汽车相关的国内期刊

永远渴望,大智若愚(stay hungry, stay foolish)

自己建网站写小说可行吗网站界面设计和ios移动界面设计的区别

1.注册建造师应当在相应的岗位上执业。但同时,国家鼓励和提倡注册建造师( )。 A.一师多岗 B.一师全岗 C.一师专岗 D.专岗专职 正确 正确答案:左边查询 学生答案:A 2.下列规范性文件中,效力最高的是( )。 A.地方性法规 B.行政法规 C.行政规章…

小企业网站推广设计国外网站有哪些

esb 和 开源esbJavaOne 2015即将结束,这又是一次很棒的社区活动。 我和Rafael进行了两次会议和一次HOL 。 我最喜欢的会议之一实际上是:谈论ESB,如果今天完成的话。 我以为那是过去? 我通常也倾向于这样说。 但是,系统…

北京网站优化流程适合新手做的小生意

题目描述 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…

营口网站优化网站建设与网页制作盒子模型

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

价格划算的东莞建网站公司桂林什么公司做网站推广好

深入理解 Spring Boot:核心知识与约定大于配置原则 简单说一下为什么要有 Spring Boot? 因为 Spring 的缺点。 虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的(需要大量 XML 配置) 为了减少配置文件,简化开发 Spri…

苏州哪个公司做门户网站成都建好的网站出租

2019独角兽企业重金招聘Python工程师标准>>> list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: >…

做网站后台的电子文库无锡微信网站定制

javafx 使用像我这样的JavaFX爱好者反复面对的一个问题是何时(或为什么)使用JavaFX代替HTML(5)。 这是我的两分钱: 如果…,则应使用JavaFX。 …您对坚固性/质量感兴趣。 JavaFX是Java! 您将能…

服务器CPU、内存、磁盘、网络使用率,东方通CPU使用率东方通内存使用率监控脚本

#!/bin/bash # 创建日志目录LOG_DIR="/log"LOG_FILE="$LOG_DIR/jk.txt" # 阈值设置CPU_THRESHOLD=80 # CPU使用率阈值(%)MEM_THRESHOLD=80 # 内存使用率阈值(%)DISK_THRESHOL…

3 网络基础知识+web基础知识+部署Server

3.1网络基础 3.1.1 OSI七层模型 # 一种理论上的网络通信模型,实践中未应用;从底层到上层分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 * 物理层:物理介质传输比特流,如电缆、光缆 * 数据链路…

什么是 AutoModel

什么是 AutoModelAutoModel 加载模型”是指使用 Hugging Face Transformers 库提供的 AutoModel 系列类,根据模型名称自动识别并加载对应的预训练模型结构和权重,从而无需手动指定具体模型类(如 BertModel、GPT2Mod…

深入解析:STM32——WDG看门狗

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

wxpython图形界面_01_最小基本结构

import wx# 创建应用程序对象 app = wx.App()# 创建窗口对象 frm = wx.Frame(None, title=第一个应用程序, size=(800, 600), pos=(200, 50))# 显示窗口 frm.Show()# 进入主事件循环 app.MainLoop()