JS/TS算法---分治和排序
function reversePairs(nums: number[]): number {
let count = 0;
// 如果数组中只有1个元素或者为空,则不存在逆序对
if (nums.length < 2) return count;
const mergeSort = (front, behind) => {
// 如果前后指针相遇,则归并区间只剩下一个元素了
if (front == behind) return [nums[front]];
let mid = front + ((behind - front) >> 1);
// 规则让左半部分不包含中心元素 右半部分包含中心元素
let left = mergeSort(front, mid);
let right = mergeSort(mid + 1, behind);
let temp = new Array(behind - front + 1).fill(0);
// 合并有三个指针
let cur = 0,
l = 0,
r = 0;
while (l < left.length && r < right.length) {
// 如果右边元素大于左边元素,将左边元素放到结果数组中
if (right[r] >= left[l]) temp[cur++] = left[l++];
else {
temp[cur++] = right[r++];
// 如果左边元素大于右边元素,那就出现了序列对了-------**
// 由于左右两边都是有序的,左边当前元素及之后的元素都会跟右边构建逆序对
count += left.length - l;
}
}
while (l < left.length) temp[cur++] = left[l++];
while (r < right.length) temp[cur++] = right[r++];
return temp;
};
// 左闭右闭区间
mergeSort(0, nums.length - 1);
return count;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!