关注
第四题代码,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
*/
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 挣钱虽不多,但也弥补了校园时期的遗憾3009
- 2... J人永远闲不下来于是去提前实习2394
- 3... 拥抱AI,程序员的最后出路2299
- 4... mentor视角下的优秀实习生2264
- 5... 大厂提前实习对AI开发的新感悟2243
- 6... 面试官视角聊聊,怎么准备AI大模型产品面试?2224
- 7... 牛客吐槽大会 | 有槽不吐,留着过年?吐完领现金红包,痛快!2177
- 8... 我用Notion+AI整理面经,2周从迷茫到拿3个offer2177
- 9... 真正会被取代的,是你心里面的幻觉1827
- 10... 努力挣钱的意义具象化了1717
正在热议
更多
# 今年春招是金一银二嘛? #
9785次浏览 124人参与
# AI时代的工作 VS 传统时代的工作,有哪些不同? #
9236次浏览 213人参与
# 抛开难度不谈,你最想去哪家公司? #
5471次浏览 126人参与
# 为什么有人零实习也能进大厂? #
6036次浏览 139人参与
# 1月小结:你过的开心吗? #
2185次浏览 53人参与
# 赚钱的意义在这一刻具象化 #
4445次浏览 104人参与
# 没关系,至少我的__很曼妙 #
4109次浏览 67人参与
# 你的第一家实习公司是什么档次? #
4891次浏览 77人参与
# 当你问AI“你会取代我的工作吗”,它说_? #
4322次浏览 148人参与
# 你的landing期是如何度过的? #
9449次浏览 181人参与
# AI求职实录 #
4558次浏览 126人参与
# 除了Java,最推荐学什么技术? #
6763次浏览 162人参与
# 牛客吐槽大会 #
3815次浏览 77人参与
# 机械人你知道哪些单休企业 #
83224次浏览 415人参与
# 你觉得什么岗位会被AI替代 #
37039次浏览 256人参与
# 秋招结束之后的日子 #
117136次浏览 1062人参与
# 机械人春招想让哪家公司来捞你? #
379436次浏览 3141人参与
# 你在职场上见过哪些“水货”同事 #
30886次浏览 168人参与
# 哪些瞬间让你真切感受到了工作的乐趣 #
23303次浏览 101人参与
# 实习想申请秋招offer,能不能argue薪资 #
215510次浏览 1163人参与