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

深入浅出javaweb实战重庆seo排名优化

深入浅出javaweb实战,重庆seo排名优化,小语种外贸网站,湖南软件定制开发目录 1.升序(以右边的合并组为基准) 2.降序(以左边的合并组为基准) 3.逆对序--固定下表 1.升序(以右边的合并组为基准) 找出左边有多少个数比我(nums[right])大 应该在每一次合并之前,进行逆…

目录

1.升序(以右边的合并组为基准)

2.降序(以左边的合并组为基准)

 3.逆对序--固定下表


1.升序(以右边的合并组为基准)

找出左边有多少个数比我(nums[right])大

  • 应该在每一次合并之前,进行逆序对查找
  • 每一个该合并的组都是按升序排列,所以当nums[left]<nums[right]时,应该left++,因为都是升序,所以当nums[left]>nums[right],right++时,left从当前位置不动。

class Solution {
public:vector<int> ret;int vim=0;int reversePairs(vector<int>& record) {ret.resize(record.size());mergesort(record,0,record.size()-1);return vim;}void merge(vector<int>&nums,int low,int high,int mid){int left=low,right=mid+1, i=0;while(left<=mid&&right<=high){if(nums[left]<=nums[right]) ret[i++]=nums[left++];else  {ret[i++]=nums[right++];vim+=(mid+1-left);}}while(left<=mid) ret[i++]=nums[left++];while(right<=high) ret[i++]=nums[right++];for(int i=0;i<high-low+1;i++){nums[i+low]=ret[i];}}void mergesort(vector<int>&nums,int low,int high){if(low>=high) return;int mid=(low+high)/2;mergesort(nums,low,mid);mergesort(nums,mid+1,high);merge(nums,low,high,mid);}
};

2.降序(以左边的合并组为基准)

 找出多少个数比我小

 合并过程:

 

class Solution {
public:vector<int> ret;int vim=0;int reversePairs(vector<int>& record) {ret.resize(record.size());mergesort(record,0,record.size()-1);return vim;}void merge(vector<int>&nums,int low,int high,int mid){int left=low,right=mid+1, i=0;while(left<=mid&&right<=high){if(nums[left]>nums[right]) {vim+=(high-right+1);ret[i++]=nums[left++];}else  {ret[i++]=nums[right++];}}while(left<=mid) ret[i++]=nums[left++];while(right<=high) ret[i++]=nums[right++];for(int i=0;i<high-low+1;i++){nums[i+low]=ret[i];}}void mergesort(vector<int>&nums,int low,int high){if(low>=high) return;int mid=(low+high)/2;mergesort(nums,low,mid);mergesort(nums,mid+1,high);merge(nums,low,high,mid);}
};

 对比:

降序升序

void merge(vector<int>&nums,int low,int high,int mid)
    {
        int left=low,right=mid+1, i=0;
        while(left<=mid&&right<=high)
        {
             if(nums[left]>nums[right]) 
             {
                vim+=(high-right+1);
                ret[i++]=nums[left++];
             }
            else  
             ret[i++]=nums[right++];

}
        while(left<=mid) ret[i++]=nums[left++];
        while(right<=high) ret[i++]=nums[right++];
        for(int i=0;i<high-low+1;i++)
        {
            nums[i+low]=ret[i];
        }
    }

 void merge(vector<int>&nums,int low,int high,int mid)
    {
        int left=low,right=mid+1, i=0;
        while(left<=mid&&right<=high)
        {
             if(nums[left]<=nums[right])                 ret[i++]=nums[left++];
            else  
            {
                ret[i++]=nums[right++];
                vim+=(mid+1-left);
            }

        }
        while(left<=mid) ret[i++]=nums[left++];
        while(right<=high) ret[i++]=nums[right++];
        for(int i=0;i<high-low+1;i++)
        {
            nums[i+low]=ret[i];
        }
    }

 3.逆对序--固定下表

增加一个下表数据,和交换下表数组,当交换数组发生数据交换时,交换下表数组也要发生数据交换

 

class Solution {
public:vector<int> tmp;    // 临时数据数组vector<int> count;  // 结果数组vector<int> index;  // 原始索引数组vector<int> tmpIdx; // 临时索引数组vector<int> countSmaller(vector<int>& nums) {int n = nums.size();tmp.resize(n);count.resize(n, 0);index.resize(n);tmpIdx.resize(n);// 初始化原始索引for(int i = 0; i < n; ++i) index[i] = i;mergesort(nums, 0, n-1);return count;}void mergesort(vector<int>& nums, int low, int high) {if(low >= high) return;int mid = low + (high - low)/2; // 防溢出mergesort(nums, low, mid);mergesort(nums, mid+1, high);merge(nums, low, mid, high);}void merge(vector<int>& nums, int low, int mid, int high) {int left = low, right = mid+1, i = 0;// 合并并统计while(left <= mid && right <= high) {if(nums[left] > nums[right]) {// 右元素更小:存入临时数组并计数tmp[i] = nums[left];tmpIdx[i] = index[left]; // 记录原始索引count[index[left]]+=high-right+1;left++;i++;} else {// 左元素更大或等于:累加已处理的右元素数tmp[i] = nums[right];tmpIdx[i] = index[right]; // 记录原始索引right++;i++;}}// 处理剩余左半部分(补充统计)while(left <= mid) {tmp[i] = nums[left];tmpIdx[i] = index[left];left++;i++;}// 处理剩余右半部分(无需统计)while(right <= high) {tmp[i] = nums[right];tmpIdx[i] = index[right];right++;i++;}// 写回原数组并更新索引for(int id = 0; id < i; ++id) {nums[low + id] = tmp[id];index[low + id] = tmpIdx[id]; // 正确传递原始索引}}
};

http://www.cadmedia.cn/news/4306.html

相关文章:

  • 武汉做网站小程序哪家公司好河南企业站seo
  • 复制审查元素做网站网站搜索引擎拓客
  • 网页设计图片横排代码临沂seo优化
  • 网站建设开发语言与平台武汉seo 网络推广
  • 太原市住房和城乡建设委员会官方网站百度网页版链接地址
  • 河南郑州疫情网店seo名词解释
  • 市场来说网站建设销售发展怎么样搜索引擎营销方式
  • 网站建设费 无形资产网站推广app下载
  • 如何做网站店铺在线数据分析工具
  • 河南省大型项目建设办公室网站网络营销推广方法和手段
  • 福建省人民政府网站官网互联网广告管理暂行办法
  • 做百度色情网站排名赚钱吗宁波seo
  • 投资建设项目管理师报名网站东莞免费建站公司
  • 网站门户设计seo试用软件
  • 网站维护费公司网络营销策划书
  • 建站网站建设提高工作效率的措施
  • 网站备案完毕 怎样建设网站免费友情链接网页
  • 插插插网站正在建设中模板网站好还是自助建站好
  • 广州市建设职业培训学校网站aso推广平台
  • 网站建设实训个人总结3000营销策略方案
  • 食品电子商务网站建设方案网络营销与策划实践报告
  • 网店推广技巧海会网络做的网站怎么做优化
  • 铁道部建设司网站社会新闻热点事件
  • 自贡普通网站建设费用如何推广引流
  • 网站建设 微盘关键词汇总
  • 政府网站建设制度网站内容管理系统
  • 线上网课seo外包公司
  • 自学做网站要多久企业培训课程有哪些
  • 周口建设公司网站百度客服人工电话24小时
  • 专业集团门户网站建设企业自己制作网页的网站