剑指offer-面试题51-数组中的逆序对-归并排序
/*
题目:
求给定数组的逆序对数。
*/
/*
思路:
归并排序。
*/ #include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map> using namespace std; int merge(int A[], int left,int mid,int right){
int myCount = 0;
int p1 = left;
int p2 = mid + 1;
int temp[right-left+1];
int i = 0;
while(p1 <= mid && p2 <= right){
if(A[p1] > A[p2]){
myCount = myCount + 1 + mid - p1;//右边数字大于左边数字的个数。
temp[i] = A[p2];
p2++;
}else{
temp[i] = A[p1];
p1++;
}
i++; }
while(p1 <= mid){
temp[i++] = A[p1++];
}
while(p2 <= right){
temp[i++] = A[p2++];
}
for(int i = left; i <= right; i++){
A[i] = temp[i-left];
}
return myCount;
}
int sort(int A[], int left,int right) {
if(left == right){
return 0;
}
int mid = left + ((right-left) / 2);
//cout<<left<<" "<<mid<<" "<<right<<endl;
int num1 = sort(A,left,mid);
int num2 = sort(A,mid+1,right);
return merge(A,left,mid,right) + num1 + num2;
} int main(){
int a[] = {1,3,7,2,4,1};
cout<<sort(a,0,5)<<endl;
for(int i = 0; i < 6;i++){
cout<<a[i]<<" ";
}
return 0;
}
剑指offer-面试题51-数组中的逆序对-归并排序的更多相关文章
- 剑指Offer - 九度1348 - 数组中的逆序对
剑指Offer - 九度1348 - 数组中的逆序对2014-01-30 23:19 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个 ...
- 剑指offer(35)数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 【剑指Offer】35、数组中的逆序对
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P ...
- 力扣Leetcode 面试题51. 数组中的逆序对 - 归并排序
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= ...
- 【剑指offer】题目36 数组中的逆序对
数组中任取两个数字,如果前面的数字大于后面的数字称为一个逆序对 如:1,2,1,2,1 有3个逆序对 思路:知道O(N2)肯定是错的.开始想hash,试图找到O(n)的算法,想了很久,找不到.后来想到 ...
- 归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对
面试题51. 数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出 ...
- LeetCode 面试题51. 数组中的逆序对
面试题51. 数组中的逆序对 题目来源:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/ 题目 在数组中的两个数字,如果 ...
- 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组
剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ...
- 《剑指offer》面试题51. 数组中的逆序对
问题描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5 限制: ...
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...
随机推荐
- LeetCode 381. Insert Delete GetRandom O(1) - Duplicates allowed O(1) 时间插入、删除和获取随机元素 - 允许重复(C++/Java)
题目: Design a data structure that supports all following operations in averageO(1) time. Note: Duplic ...
- 4..部署场景2:带有遗留的Linux Bridge
此场景描述了使用Linux bridge的ML2插件实现OpenStack网络服务的遗留(基本)实现. 遗留实现通过为常规(非特权)用户提供一种方法来管理一个项目中的虚拟网络,并包含以下组件:提供了自 ...
- How to setup backup by using EMC NW + EMC NMM for sqlserver failover cluster (not always on)
As we said, sqlsever fail over cluster is perviously version of always on. The HA was guarenteed by ...
- kendo ui 好用的小部件--grid
Kendo Ui Grid控件,继承至Widget. https://demos.telerik.com/kendo-ui/grid/index 快速上手教程 下面的代码来自本教程 做表格时非常方 ...
- 【C++】应用程序无法正常启动0xc000007b
在Windows平台编程时,或运行应用程序时,偶尔会遇到“应用程序无法正常启动0xc000007b”或“缺少***.dll”的问题, 首先需要考虑的就是程序相关联的dll有没有放到系统环境中,dll通 ...
- C++ STL——优先队列的结构体表示方法
优先队列是队列的一种,但是自身具有一定的排序功能,所以不具有队列“先进先出”的性质 刚刚接触优先队列,看过网上的用法后感觉还是太过于朦胧,所以打算自己写一个稍微细节一点的. 头文件 #include& ...
- [Python]获取字典所有值
方法一:Key Value 直接获取 databases = {1: 'Student', 2: 'School'} for k,v in databases.items(): print(k,v) ...
- HDU 5234 背包。
J - 10 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- vue中阻止事件穿透的方法
默认情况下,事件在h5页面会穿透传递,比如一div里面套一个div,点击上层div,下层div也会响应 要阻止事件穿透,使用event.stopPropagation(); 代码示例: <div ...
- Solr系列2-Solr服务安装
1: Solr简介 1.1 简介: 1.2 下载: 2:Solr 安装 2.1 安装 2.2 目录结构 3 :启动Solr 3.1 启动 3.2使用Solr提供的测试数据 3.5 Solr配置文集 3 ...