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

加强门户网站建设方案腾讯云wordpress建站教程

加强门户网站建设方案,腾讯云wordpress建站教程,增城企业网站建设,自己开一个培训机构流程分治即分而治之,将一整个大问题分解成若干个小问题来解决。 一.颜色分类 来看题目(出自力扣): 题目很简单,让我们将一个数组中乱序的颜色排列成红、白、蓝的正确序列。 因为题目中是用数字来代替颜色,因此…

分治即分而治之,将一整个大问题分解成若干个小问题来解决。


一.颜色分类

来看题目(出自力扣):

题目很简单,让我们将一个数组中乱序的颜色排列成红、白、蓝的正确序列

因为题目中是用数字来代替颜色,因此题目要求不能使用排序函数。

那么我们如何来解决这个问题呢???

根据分治思想,题目要求我们将颜色分为三块,也就是说我们要管理三块区域,因此我们是否能通过去遍历数组,然后将元素放在其应在的区域呢???

如下图所示,我们可以使用三指针,其中 i 指针去遍历数组,如果 i 下标元素为0,就将其放在left维护的左边区域,如果为2,就将其放在right维护的右边区域,而剩余的1,都将会被集中在中间区域

值得注意的是,i 下标是从左侧开始去遍历数组的,所以 i 下标左侧的区间一定是排好序的 0 和  1,而当 i 右侧的区域则是未排序的一段数据和排好的 2

这意味着当 i 与 left 交换一次数据之后,可以直接++,但是当 i 与 right 交换一次数据之后,得到的可能是0,所以 i 就不能++,必须重新进行一次判断

    void sortColors(vector<int>& nums) {int left = -1,right = nums.size(),i = 0;while(i < right){if(nums[i] == 0)swap(nums[++left],nums[i++]);else if(nums[i] == 2)swap(nums[--right],nums[i]);elsei++;}}

二.快速排序

上述分治思想,貌似和快速排序的思想很相似,相对的,我们也可以用分治的思想来优化快排如果快速排序的数组中有很多重复元素,甚至是全是重复元素, 那快速排序的效率就会及其低下

因此,我们希望优化一下快速排序,那么就可以通过上述三指针的思想,确定数组中的一个基准元素key,一次排序后将数组分为三块,左边块全是小于key,中间块全是等于key,右边块全是大于key,这样就能保证相同的元素不会继续参与排序

其中key的选择,我们采用在排序数组中随机选择的方式,具体优化代码如下:

    void quickSort(vector<int>& nums,int begin,int end){if(begin >= end) return; int left = begin - 1,right = end + 1;int key = nums[begin + (rand() % (end - begin + 1))];int  i = begin;while(i < right){if(key < nums[i])swap(nums[--right],nums[i]);else if(key > nums[i])swap(nums[++left],nums[i++]);elsei++;}mySort(nums,begin,left);mySort(nums,right,end);}vector<int> sortArray(vector<int>& nums) {srand(time(NULL));quickSort(nums,0,nums.size() - 1);return nums;}

三.交易逆序对的总数

来看题目(出自力扣):

题目很好理解,就是让我们统计一个数组中,前一个数比后一个数大的数对有多少个。 

 很显然,这道题可以直接通过两层for循环遍历数组来暴力求解,但是我们希望用时间复杂度更加优秀的解法,该怎么解这道题呢???

本题,我们可以采用分治 + 归并的思想来优化时间复杂度。

首先我们需要复习一下归并排序的原理:将一个数组分成两块,分别将两块子数组内的元素进行排序,最后再将两块数组合在一起整体排序,如此递归下去,就能得到一个时间复杂度为O(N*logN)的排序效率

那么本题为什么可以使用归并排序呢??? 

我们用题目的示例来做解释,将数组分为如下两块,能够看出,一开始两个子数组还是乱序,现在我们来统计两个子数组中的逆序对,分别是(9,7)和(5,4),统计完之后,这两个子数组就可以分别完成内部排序。

有没有发现其中的奥秘,我们将子数组分别排序之后,并不会影响相较于两个子数组中的两个元素的相对位置,比如7和6的前后位置是相对不变的,此时再将两个子数组进行整体排序,因为归并排序将两个子数组合并时,是分别去比较两个数字的大小的,所以我们就可以在这时得到逆序对

 得此结论,我们就可以在归并排序的过程中,去统计逆序对的个数。

class Solution {int arr[50001];
public:int mergeSort(vector<int>& record, int left,int right){if(left >= right) return 0;int mid = (left + right) >> 1;int ret = 0;ret += mergeSort(record,left,mid);ret += mergeSort(record,mid + 1,right);int cur1 = left,cur2 = mid + 1;int i = 0;while(cur1 <= mid && cur2 <= right){if(record[cur1] > record[cur2]){ret += mid - cur1 + 1;arr[i++] = record[cur2++];}elsearr[i++] = record[cur1++];}while(cur1 <= mid)arr[i++] = record[cur1++];while(cur2 <= right)arr[i++] = record[cur2++];for(int j = left; j <= right;j++)record[j] = arr[j - left];return ret;}int reversePairs(vector<int>& record) {return mergeSort(record,0,record.size() - 1);}
};

由于快排和归并排序都表现出分治的思想,所以在分治算法中二者是常客。


文章转载自:

http://LNN3ZO57.jtdzn.cn
http://axvmzs22.jtdzn.cn
http://VHOAe51d.jtdzn.cn
http://3v6jvxFd.jtdzn.cn
http://8XTLEcEf.jtdzn.cn
http://YGsPIzmh.jtdzn.cn
http://oHYBRlIa.jtdzn.cn
http://0vzylqzI.jtdzn.cn
http://tujfIcdx.jtdzn.cn
http://51Tmxtp8.jtdzn.cn
http://UUtCRTqX.jtdzn.cn
http://A7X6lef9.jtdzn.cn
http://nxV1at4l.jtdzn.cn
http://TqgebrK0.jtdzn.cn
http://qsrUxEJQ.jtdzn.cn
http://tFifa0r5.jtdzn.cn
http://u8EKnhVO.jtdzn.cn
http://nN6AOp4z.jtdzn.cn
http://QY5Mq5FM.jtdzn.cn
http://y8EiRfIE.jtdzn.cn
http://umZiieYr.jtdzn.cn
http://wieDY6iu.jtdzn.cn
http://I3awmbkT.jtdzn.cn
http://yJFShIqy.jtdzn.cn
http://ZjvxSoWV.jtdzn.cn
http://fzmmIDKA.jtdzn.cn
http://cgGobiAK.jtdzn.cn
http://HPLfTRvV.jtdzn.cn
http://MziA41k6.jtdzn.cn
http://Up13scTL.jtdzn.cn
http://www.dtcms.com/wzjs/615323.html

相关文章:

  • 网站代码优化的方法人工智能培训机构哪个好
  • 网站 公众号 建设方案无极网站免费观看
  • 如何做网站内链知名网络推广
  • 做一个购物网站数据分析软件
  • 易语言跳到指定网站怎么做国家网站域名
  • 用别人的公司名字做网站项目外包平台接活
  • 网站建设相关的网站北京简网科技有限公司
  • 如何利用国外网站做自媒体网络前端开发招聘
  • 自媒体网站模板o2o商城网站制作
  • 网站流量推广外贸建站哪家公司好
  • 建网通无锡网站的优化哪家好
  • 视频代做网站做商业地产常用的网站
  • 提高网站排名怎么做wordpress微信小程序模板
  • 取消网站备案苏州模板建站哪家好
  • 湖州百度网站建设贸易公司怎么做网站比较好
  • 介绍移动互联网的网站有哪些自媒体网站大全
  • 曹妃甸网站建设凡客诚品属于什么档次
  • 河南网站建设技术公司网页设计网站图片
  • 网站建设项目环境影响评价目录做网站用什么工具
  • 沈阳定制网站开发公司宁波企业网站制作
  • 做网站开发需要学什么软件网络营销优秀案例
  • 做app网站的公司中国纪检监察网站首页
  • 网站建设发布ps科技感经济师考试时间2023报名时间
  • 西安手机定制网站建设中国网站
  • 成都市 网站建设易语言做返利网站
  • 奉贤做网站价格圣亚科技网站案例
  • 网站新闻不收录域名解析错误是什么原因
  • 网站开发搭建ssc p2p 互助东莞网络营销新模式
  • 做网站的论文摘要自己开发聊天软件
  • 深圳找个人做网站深圳物流公司收费标准