求——逆 序 对 Part 0:作者前言(废话) 以前其实早就学过用二路归并排序的方法求序列的逆序对,因为一直没有学会二路归并,所以逆序对一直不会做 前几天学了线段树,然后无意间在书上看到了“线段树求逆序对”这样的问题…… 于是果断魔改一发线段树求一手逆序对。。。然后就有了这个博客 另外,祝贺我考试 ...
分类:
其他好文 时间:
2020-07-05 17:33:56
阅读次数:
68
算法时间复杂度:妥妥的nlogn 步骤: 1.确定分界点 mid = (l+r) >> 1 2.递归排序左右两边 3.归并——合二为一(用两个指针,分别指向两个序列) 就是递归到最底部,然后对小部分排序,归并为大部分。 代码模板: 1 void merge_sort(int q[], int l, ...
分类:
编程语言 时间:
2020-07-05 17:15:49
阅读次数:
80
问题描述 给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1]输出: [2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 ...
分类:
编程语言 时间:
2020-07-05 15:45:27
阅读次数:
67
把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。 可从上到下或从下到上进行。 过程演示: 一、迭代法1.待排序数据为data2.每轮排序的结果保存为result3.每轮排序的结果result需要重新复制给datapublic static void main(String[] args) ...
分类:
编程语言 时间:
2020-07-04 17:12:17
阅读次数:
73
一、递归 递归就是方法自己调用自己,每次调用时传入不同的变量。有助于编程者解决复杂的问题,同时可以让代码变得简洁。 递归用于解决什么样的问题 各种数学问题如: 8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题(google编程大赛)等。 各种算法中也会使用到递归,比如快排,归并排序,二分查找, ...
分类:
其他好文 时间:
2020-07-03 23:31:26
阅读次数:
76
双指针算法 模板 for (int i=0;i<n;i++) { while(j<i && check(i,j)) j++; /* 这里面 的 j 相比于两重循环,不用 回调 所以时间复杂度低 */ //具体问题的逻辑 } /* 常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) ...
分类:
其他好文 时间:
2020-07-03 19:09:58
阅读次数:
50
目的:跟编程纠缠了这么久,今天我想跟排序算法做个了断。 第一种:归并排序 思想: 1) 两个已经排好序的序列,如果要融合那复杂度是多少呢? 很简单 O(n)。例子: 1 3 5 7 9 和 2 4 6 8 10 12原理很简单: 敌不动我不动,谁大谁动(假设按照从大到小的顺序排序的话) 2) 归并排 ...
分类:
编程语言 时间:
2020-07-02 21:49:24
阅读次数:
60
容易想到的暴力解法:把数据都取出来排序,需要n2大小的数组存储 既然数组是有序的,把每一行看成一个有序数组,对这些数组进行归并排序,归并到第k个数为止。 看了题解,了解到优先级队列PriorityQueue可以用于实现归并排序,PriorityQueue底层是一个堆的结构。具体可参考这篇文章 刷算法 ...
分类:
编程语言 时间:
2020-07-02 13:42:16
阅读次数:
51
题目描述: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 今日学习: 1.复习reduce 2.归并排序 题解: 1.直接合成一个数组然后sort 2.二分查找 3.归并排序 //令人羞耻的 ...
分类:
其他好文 时间:
2020-07-02 13:36:03
阅读次数:
47