剑指offer面试题[36]-数组中的逆序对
题目描述
输入描述:
题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<=2*10^5
输入
1,2,3,4,5,6,7,0
输出
#include<iostream>
#include<vector>
using namespace std;class Solution {
public:int InversePairs(vector<int> data) {int length = data.size();if (length <= 0)return 0;//vector<int> copy=new vector<int>[length];vector<int> copy;for (int i = 0; i<length; i++)copy.push_back(data[i]);long long count = InversePairsCore(data, copy, 0, length - 1);//delete[]copy;return count % 1000000007;}long long InversePairsCore(vector<int> &data, vector<int> ©, int start, int end){if (start == end){copy[start] = data[start];return 0;}int length = (end - start) / 2;long long left = InversePairsCore(copy, data, start, start + length);long long right = InversePairsCore(copy, data, start + length + 1, end);int i = start + length;int j = end;int indexcopy = end;long long count = 0;while (i >= start&&j >= start + length + 1){if (data[i]>data[j]){copy[indexcopy--] = data[i--];count = count + j - start - length; //count=count+j-(start+length+1)+1;}else{copy[indexcopy--] = data[j--];}}for (; i >= start; i--)copy[indexcopy--] = data[i];for (; j >= start + length + 1; j--)copy[indexcopy--] = data[j];return left + right + count;}
};int main()
{Solution s;vector<int> input;int n;cin >> n;for (int i = 0; i < n; i++){int number;cin >> number;input.push_back(number);}int count=s.InversePairs(input);cout << count << endl;
}
剑指offer面试题[36]-数组中的逆序对相关推荐
- 剑指Offer - 面试题51. 数组中的逆序对(归并排序,求逆序对)
1. 题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5限制: 0 ...
- 【剑指offer-Java版】36数组中的逆序对
数组中的逆序对:归并排序的另类应用 数组中的逆序对:给定的数组,如果两个数字中前面一个数字大于后面的一个,那么称为一个逆序对,数组中所有满足此关系的逆序对总数就是这个数组的逆序对 此处的实现并不优雅, ...
- 剑指offer面试题[29]-数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指offer面试题[40]-数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 注意原题目要求空间复杂度为0(1). 位运算的具体思路可以参看剑指offer. class So ...
- 剑指Offer - 面试题3. 数组中重复的数字(哈希)
1. 题目 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组 ...
- 剑指offer 面试题03. 数组中重复的数字
找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...
- 剑指offer面试题[51]-数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- 剑指offer面试题03. 数组中重复的数字(Array)
题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- 剑指offer面试题39. 数组中出现次数超过一半的数字(数组)(摩尔投票法)
题目描述 **数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素.** 思路 详见链接 代码 class Solution:def ...
最新文章
- 细数Ajax Control Toolkit 34个服务器端控件
- 活动 | PMcaff大讲堂预告:听CRM大神教你玩转CRM
- Maven 插件打包java 后台
- 解决android studio引用远程仓库下载慢(JCenter下载慢)
- Android7.0以上增加(/system/lib/libtest.so)系统库文件
- 分分钟学会JavaScript原生
- 地月距离竟然如此遥远
- echarts-wordcloud 热词云使用
- 实验三-RIPv2基本配置实验
- 沉默的大多数(王小波)
- 圣诞节快来了~用python做一个粒子烟花震撼众人赚个女孩回来吧~
- A Survey on Deep Transfer Learning 2018 翻译
- Linux内核2.6.34.14添加系统调用及编译方法(CentOS-6.4-x86_64)
- JAVA的3DES加密代码转成oc_iOS之DES加密
- 简书android des,Android 加密之DES加密
- 关于在js中使用trim函数的一些小技巧
- hdoj 2199 Can you solve this equation? 【二分枚举】
- 汝州九峰山下自产自销的好蜂蜜
- 你的人生你定义!享你所想,无惧冒险
- document.documentElement.clientHeight 与 document.body.clientHeight(杜绝千篇一律的抄袭!!)
热门文章
- 基于SSM的医院药品管理系统答辩PPT模板
- javamailsender注入失败_Springboot 之 JavaMailSender发送电子邮件
- 错误上报_PCIe错误的上报方式
- swf到html5转换器,iPixSoft SWF to HTML5 Converter(SWF到HTML5转换器) V3.6.0 官方版[安全工具]...
- .net中如何同步获取数据方式增加一样数据自动刷新列表_知客CRM如何对接微信公众号...
- win10下安装Ubuntu18.4双系统(适合小白)
- Arduino十大滤波算法程序大全(精编无错版)
- 光电整纬机狭缝检测工作原理
- Halcon PDF文档(hdevelop_users_guide)学习总结之一
- 计算机 图论基础知识,计算机基础知识