关注
第四题代码,ac import java.util.Scanner;
public class Netease4 {
private static long count = 0;
//辅助归并排序的数组
private static int[] helper;
//用来存位置信息
private static int[] oldIndex;
//类似于helper数组的问题辅助oldIndex数组的
private static int[] oldIndex2;
/**
* 跟归并求逆序对个数一样的思路,只是存储了每个数关于索引位置的信息来计算
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
helper = new int[n];
oldIndex = new int[n];
oldIndex2 = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
oldIndex[i] = i;
oldIndex2[i] = i;
}
mergeSort(nums, 0, n - 1);
System.out.print(count);
}
private static void mergeSort(int[] nums, int low, int high) {
if (high - low == 1) {
if (nums[low] > nums[high]) {
count++;
swap(nums, low, high);
swap(oldIndex, low, high);
swap(oldIndex2, low, high);
}
return;
}
if (high == low) {
return;
}
int mid = low + (high - low) / 2;
mergeSort(nums, low, mid);
mergeSort(nums, mid + 1, high);
int index1 = mid, index2 = high, i = high;
for (i = high; i >= low; i--) {
if (index1 < low || index2 < mid + 1) {
break;
}
if (nums[index1] <= nums[index2]) {
helper[i] = nums[index2];
oldIndex2[i] = oldIndex[index2];
index2--;
}else {
helper[i] = nums[index1];
for (int j = mid + 1; j <= index2; j++) {
count += oldIndex[j] - oldIndex[index1];
}
oldIndex2[i] = oldIndex[index1];
index1--;
}
}
//如果哪边没用完
if (index1 >= low) {
while (index1 >= low) {
helper[i] = nums[index1];
index1--;
i--;
}
}else {
while (index2 >= mid + 1) {
helper[i] = nums[index2];
oldIndex2[i] = oldIndex[index2];
index2--;
i--;
}
}
for (int j = low; j <= high; j++) {
nums[j] = helper[j];
oldIndex[j] = oldIndex2[j];
}
}
private static void swap(int[] nums, int a, int b) {
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
}
/*
5
2 3 4 2 5
5
3 1 4 2 5
5
3 2 4 1 5
9
3 1 4 2 5 2 6 7 8
*/
查看原帖
点赞 评论
相关推荐
10-29 19:45
吉林大学 Java
从零开始数:自我评价没有必要写,但是看起来你应该是学了csdiy的一些课程,可以在专业技能里面写上自己比较熟悉操作系统和计网,但如果你是找Java的话,把第一个项目换了吧,现在看起来有点四不像。
无论是黑马点评或者说做个轮子项目,刷题和八股也搞起来吧,而且也没必要等到寒假,最近就可以开始找,找到就偷偷实习呗,别被逮到就行了。 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的秋招白月光和意难平公司 #
24760次浏览 211人参与
# 机械人晒出你的简历 #
140442次浏览 865人参与
# 你想跟着什么样领导? #
16573次浏览 152人参与
# 比亚迪求职进展汇总 #
816135次浏览 3142人参与
# 十一月总结 #
28958次浏览 261人参与
# 深信服求职进展汇总 #
238837次浏览 1803人参与
# 如果今天是你的last day,你会怎么度过? #
54837次浏览 311人参与
# 机械人还在等华为开奖吗? #
283624次浏览 1447人参与
# 什么样的背景能拿SSP? #
121252次浏览 421人参与
# 从夯到拉,评价编程语言 #
13445次浏览 106人参与
# 职场上哪些事情令人讨厌 #
28667次浏览 114人参与
# 硬件人秋招进展 #
252065次浏览 3941人参与
# 分享一个让你热爱工作的瞬间 #
49848次浏览 429人参与
# 考研失败就一定是坏事吗? #
154206次浏览 1090人参与
# 巨人网络工作体验 #
69706次浏览 499人参与
# 找实习是选平台还是选业务? #
17731次浏览 195人参与
# 应届生进小公司有什么影响吗 #
102798次浏览 1091人参与
# 影石Insta360求职进展汇总 #
164288次浏览 1331人参与
# 实习的内耗时刻 #
204505次浏览 1501人参与
# 入职以后才知道的校招谎言 #
106403次浏览 664人参与
基恩士成长空间 446人发布