算法导论---逆序对 p24题,2-4
来源:互联网 发布:sql重复的行无法删除 编辑:程序博客网 时间:2024/04/27 12:56
修改合并排序 基本思路见p17
分解 -解决- 合并
/**
* 分治法的设计思想:将一个规模为n的问题分解为k个规模比较小的子问题,这些子问题互相独立且与原问题相同。
* 三个步骤:
* 分解:将原问题分解成一系列的子问题;
* 解决:递归地解各个子问题,若子问题足够小,则直接求解;
* 合并:将子问题的结果合并成原问题的解;
*
*
*/
package leetcode;/** * * * @author Mouse * */public class Solution {static int count = 0;static void mergeSort(int a[], int p, int r) {if (p < r) {int q = (p + r) / 2;mergeSort(a, p, q);mergeSort(a, q + 1, r);merge(a, p, q, r);}}private static void merge(int[] a, int p, int q, int r) {int nums1 = q - p + 1;int nums2 = r - q;int left[] = new int[nums1 + 2];int right[] = new int[nums2 + 2];for (int i = 1; i <= nums1; i++) {left[i] = a[p + i - 1];}for (int j = 1; j <= nums2; j++) {right[j] = a[q + j];}left[nums1 + 1] = 65535;right[nums2 + 1] = 65535;int i = 1;int j = 1;int counter = 0;//计数器for (int k = p; k <= r; k++) {if (left[i] <= right[j]) {a[k] = left[i];i++;counter++;// 记录有多少个不符合要求} else if (left[i] > right[j]) {// 这个就是我们要的a[k] = right[j];j++;count += q - p + 1-counter;}}}public static void main(String[] args) {int a[] = { -1, 2, 3, 8, 6, 1 };// 默认从1处开始存元素mergeSort(a, 1, 5);for (int i = 1; i < a.length; i++) {System.out.print(a[i] + " ");}System.out.println();System.out.println("count:" + count);}}
2 0
- 算法导论---逆序对 p24题,2-4
- 算法导论--逆序对
- 「算法导论」:思考题2-4,逆序对问题
- 【算法导论】第三版课后习题2-4逆序对
- 算法导论第二章2-4 逆序对(c++)
- 算法导论 逆序对问题
- 算法导论 逆序对问题
- 算法导论 逆序对问题
- 算法导论第2章(4) 分治法的应用 找逆序对 (习题2-4)
- 《算法导论》笔记:第2章 思考题2-4 求逆序对(代码)
- 《算法导论》中的逆序数对问题
- 算法导论 练习题 14.1-7(逆序对)
- 算法导论习题2-4 Inversions 逆序数
- 关于算法导论上一道题的思考,求逆序对数目
- 【算法导论】2-2 二路归并排序(分治)merge-sort 和逆序对的问题
- 2-4 逆序对
- 寻找逆序对的算法,要求运行时间为O(nlgn),算法导论答案
- 算法导论 14.1-7 顺序统计树求逆序对 O(nlgn)
- 组件使用component
- 儿子选择器 >
- 7.Operators Categories - 按目录分类的主要操作符列表
- linux 命令复制
- 重阳是最美的节日
- 算法导论---逆序对 p24题,2-4
- 在不同Activity之间传递数据的四种常用方法
- ireport 初学
- Android实时监听网络连接状态
- 欢迎使用CSDN-markdown编辑器
- 相似图片搜索的原理
- 第7周 项目3-负数把正数赶出队列
- 第7周项目4 队列数组
- Python numpy scipy等64位常用库地址