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

常见的门户网站有哪些下拉关键词排名

常见的门户网站有哪些,下拉关键词排名,手机网站翻页底时自动链接,杭州网站建设目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、归并排序思想 2.2.1、画图详细讲解 2.2.2、归并排序解决逆序对的代码实现 1、题目介绍 首先阅读题目可以得出要点,即当前数大于后数时则当作一个【逆序对】,而题目是要求在一个数组中计算一共存…

目录

1、题目介绍

2、解题思路

2.1、暴力破解法

2.2、归并排序思想

2.2.1、画图详细讲解

2.2.2、归并排序解决逆序对的代码实现

1、题目介绍

首先阅读题目可以得出要点,即当前数大于后数时则当作一个【逆序对】,而题目是要求在一个数组中计算一共存在多少个这样的逆序对并输出结果。 

 原题链接:LCR 170. 交易逆序对的总数 - 力扣(LeetCode)

2、解题思路

2.1、暴力破解法

看到这里的第一反应就是这不是很简单吗?心想着这困难题也不过如此吧(笑)。

就是直接使用暴力破解法,只需要两个for循环嵌套,一个record[ i ]在原地,另一个record[ j ]将后面所有遍历一遍,只要比record[ i ]的小就将计算器count加1,然后i++再从头遍历,知道找完所有,最后返回计数器count即可,于是便奋笔疾书写了起来。

int reversePairs(int* record, int recordSize) {if (recordSize == 0){return 0;}int count = 0;int i = 0, j = 0;for (i = 0; i < recordSize - 1; i++){for (j = i + 1; j < recordSize; j++){if (record[i] > record[j]){count++;}}}return count;
}

 当写完然后测试了简答数据无误,然后自信满满地点击提交,结果却直接被打脸。

看了报错结果才恍然大悟,看题目时漏看了数组长度。

题目设置的数组长度最长可达 50000,因此使用暴力破解法虽然非常简单,但是时间复杂度也非常大为O(n^2),这肯定会超出时间限制的。因此需要使用一种时间复杂度较小的遍历。到了这里才终于理解了这道题为什么是困难题!!!

2.2、归并排序思想

这里思考了一下,只要能找到 一种时间复杂度低,并且通过比较排序的算法,在比较排序的过程中顺便进行记录,这样的化就能够解决这个问题了。

于是归并排序便浮现在眼前,归并排序的时间复杂度很低只有O(nlogn),并且也是通过比较的方式进行排序,那么只需要在传统的归并排序算法中添加一些用于记录前者大于后者计算器即可。

 简单回顾一下归并排序的知识:

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用递归或者说是分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序,它包含这样三个步骤:

  • 分解:把长度为n的待排序序列分成两个长度为n/2的子序列。例如L代表头部,M代表中点,R代表尾部,将[ L,R ]分成[ L,M ]和[  M+1,R ]。
  • 解决:使用归并排序递归地排序两个子序列。
  • 合并:将两个排序好的子序列[ L,M ]和[  M+1,R ]合并成一个最终的排序序列。

在待排序序列长度为 1 的时候,递归开始「回升」,因为我们默认长度为 1 的序列是排好序的。简单来说就是:当分到单个子序列只剩下一个数字时,一个数字就是天然了有序,即此时左侧和右侧都排好序了,然后递归进行回升操作。

由于篇幅原因,如果想要更加详细地了解有关归并排序的知识,可以前往往期博客中阅读:

【算法与数据结构】归并排序的代码实现(详细图解)以及master公式的讲解_Hacynn的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/133516177?spm=1001.2014.3001.5501

2.2.1、画图详细讲解

假设我们通过归并排序的「回升」操作已经得到了两个已排序的子序列并等待合并,这两个子序列假设为:左子序列[ 8,15,17,22,35 ]和右子序列[ 9,12,15,30,38 ]。然后用malloc开辟辅助数组help,并定义一个变量sum用于记录当前逆序对的个数。

一开始我们先用p1指向子序列的头部,p2指向子序列的头部,i指向help数组的头部。

此时开始比较p1和p2指向的值,我们发现p1小于p2,不符合逆序对的前者大于后者,因此不做其他操作,直接将值放入help数组 i 位置中,并且分别进行p1++和i++,使指向下一个元素。

重复p1和p2的比较操作,发现此时p1大于p2,此时记录逆序对的sum本应该自增1。

但是这里我们可以发现一个规律:因为左子序列是有序的,如果p1此时的数比p2大,那就证明p1后面的数字也依然比p2大,因此逆序对应该有M-p1+1即4个,分别是:(15,9)、(17,9)、(22,9)、(35,9)。

所以此时sum应该+4,并将p2所指的较小值存入help中。

 i++、p2++;

此时p1仍然大于p2,再次使用M-p1+1计算出逆序对为4个,分别是(15,12)、(17,12)、(22,12)、(35,12)

此时 sum =  sum+4,并将12存入help中。

 i++,p2++;

注意特殊:此时p1 == p2,该算法在等于时尤为关键,当相等时应该将左侧p1的15放入help中并p1++,如果放的是右侧p2的15存入,就会丢失一部分逆序对,这个原理读者可以自己画图理解。

剩下的部分依然按照此规律进行操作,最终算出该轮遍历的逆序对数sum。 

2.2.2、归并排序解决逆序对的代码实现

int ExternalSort(int* arr, int L, int M, int R)
{int* help = (int*)malloc(sizeof(int) * (R - L + 1));int p1 = L;int p2 = M + 1;int sum = 0;int i = 0;while ((p1 <= M) && (p2 <= R)){//p1 大于 p2 则计算出逆袭对个数并加入sum中,p1小于p2时则给0(即不操作)sum += arr[p1] > arr[p2] ? (M - p1 + 1) : 0;//较小的数拷贝进help数组,相等时拷贝p1指针的数help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];}//当有一个子序列遍历完了,则将另外一个子序列中剩余的数据全部放入help数组中while (p1 <= M) { help[i++] = arr[p1++]; }while (p2 <= R) { help[i++] = arr[p2++]; }//将辅助数组help中已经合并完成的数据传回给原数组arr的相应位置for (i = 0; i < (R - L + 1); i++){arr[L + i] = help[i];}free(help);help = NULL;return sum;  //返回本轮操作的sum值}int MergeSort(int* arr, int L, int R)
{if (L == R){return 0;}int mid = L + (R - L) / 2;return MergeSort(arr, L, mid) +   //对拆分的左子序列进行递归操作MergeSort(arr, mid + 1, R) +  //对拆分的右子序列进行递归操作ExternalSort(arr, L, mid, R);  //外部排序并计算出逆序对sum
}int reversePairs(int* record, int recordSize) {int ret = 0;if (recordSize == 0)    //对空数组进行判断{return 0;}ret = MergeSort(record, 0, recordSize - 1);return ret;
}

到这里,关于本题的解题过程就结束了 。

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!


文章转载自:
http://slinkingly.c7512.cn
http://coxcomb.c7512.cn
http://spinule.c7512.cn
http://helicoidal.c7512.cn
http://helispherical.c7512.cn
http://howler.c7512.cn
http://interrelation.c7512.cn
http://awful.c7512.cn
http://ketolytic.c7512.cn
http://moulmein.c7512.cn
http://pearmain.c7512.cn
http://chalkiness.c7512.cn
http://dyslogia.c7512.cn
http://antedate.c7512.cn
http://depolymerize.c7512.cn
http://superabundant.c7512.cn
http://tellurian.c7512.cn
http://duka.c7512.cn
http://cane.c7512.cn
http://fumarate.c7512.cn
http://loris.c7512.cn
http://accusable.c7512.cn
http://thai.c7512.cn
http://absorbedly.c7512.cn
http://methodistic.c7512.cn
http://organon.c7512.cn
http://utricularia.c7512.cn
http://hipshot.c7512.cn
http://ewer.c7512.cn
http://recondition.c7512.cn
http://giaour.c7512.cn
http://encumbrance.c7512.cn
http://predepression.c7512.cn
http://satay.c7512.cn
http://reseed.c7512.cn
http://fraenum.c7512.cn
http://sounder.c7512.cn
http://pizzazz.c7512.cn
http://swedenborgian.c7512.cn
http://overdrawn.c7512.cn
http://tomsk.c7512.cn
http://incipient.c7512.cn
http://carmel.c7512.cn
http://avenue.c7512.cn
http://inflammatory.c7512.cn
http://curium.c7512.cn
http://clingstone.c7512.cn
http://ruse.c7512.cn
http://everbearing.c7512.cn
http://pigtailed.c7512.cn
http://handshake.c7512.cn
http://bourg.c7512.cn
http://checkerboard.c7512.cn
http://verbalism.c7512.cn
http://victimization.c7512.cn
http://baroness.c7512.cn
http://arpent.c7512.cn
http://ammunition.c7512.cn
http://violescent.c7512.cn
http://letch.c7512.cn
http://filiety.c7512.cn
http://chimeric.c7512.cn
http://forwardness.c7512.cn
http://humph.c7512.cn
http://pleuritic.c7512.cn
http://ribgrass.c7512.cn
http://bullring.c7512.cn
http://pya.c7512.cn
http://barkeeper.c7512.cn
http://nebulium.c7512.cn
http://brookite.c7512.cn
http://endexine.c7512.cn
http://diffractive.c7512.cn
http://halvah.c7512.cn
http://hagbut.c7512.cn
http://chippewa.c7512.cn
http://succose.c7512.cn
http://civilizable.c7512.cn
http://discase.c7512.cn
http://peritricha.c7512.cn
http://olefin.c7512.cn
http://spill.c7512.cn
http://nicrosilal.c7512.cn
http://hemisphere.c7512.cn
http://trucial.c7512.cn
http://bladderwort.c7512.cn
http://verandah.c7512.cn
http://leafed.c7512.cn
http://diffractometry.c7512.cn
http://computerizable.c7512.cn
http://license.c7512.cn
http://ahull.c7512.cn
http://hemodynamics.c7512.cn
http://pavement.c7512.cn
http://weld.c7512.cn
http://discursiveness.c7512.cn
http://seapiece.c7512.cn
http://keratin.c7512.cn
http://rattily.c7512.cn
http://lawn.c7512.cn
http://www.zhongyajixie.com/news/91423.html

相关文章:

  • 行业查询网站企业网站seo贵不贵
  • 树莓派做博客网站seo和sem的关系
  • 做网站免费空间营销是什么意思
  • 免费做淘宝客网站北京网站优化方案
  • 网站 什么语言开发的it培训班学出来有用吗
  • 汽车网站建设参考文献开题报告关键词推广哪家好
  • 学生作业制作网站手机优化软件排行
  • 网站开发后端框架什么意思线上推广的方式
  • 西安给大学做网站公司武汉大学人民医院精神卫生中心
  • 模板网站建设方案怎么进行推广
  • 洛宁网站建设谷歌app下载 安卓
  • 个人跨境电商怎么开店铺合肥搜索引擎优化
  • 旅行社应做哪些网站需要优化的地方
  • 网站用户 分析中国重大新闻
  • 网站备案接入ipseo收费标准多少
  • php网站开发用什么php学seo如何入门
  • 手机制作网站软件互联网广告推广是做什么的
  • 专业做网站哪里好培训网站源码
  • wordpress 系统找不到指定的文件.谷歌seo优化
  • 学动漫设计去哪个学校baiduseoguide
  • 可做百科资料参考的网站爱用建站官网
  • 德庆网站建设网页在线客服免费版
  • 腾讯云ADM怎么做网站产品营销方案案例范文
  • 吴中区网站设计公司百度指数功能有哪些
  • 网站建设运营预算微信代运营
  • 政府门户网站建设管理情况汇报百度刷排名优化软件
  • 网站的footer怎么做网站如何在百度刷排名
  • 聊城做网站的公司资讯seo排名培训
  • 赫章县网站建设线上推广渠道
  • 网页设计如何把照片作为背景广州网站优化公司