分治
不想WA
记录我的学习笔记呀
展开
-
快速排序
基本思想 快排的基本思想是分治,将数组A[p…r]划分为两个(可能为空)子数组A[p…q-1]和A[q+1…r],使得A[p…q-1]中的每个元素都小于等于A[q],而A[q]也小于等于A[q+1…r]中的每个元素,其中,计算下标q也是划分过程的一部分。 大体过程 通过上述的基本思想,写出大体代码如下 void quicksort(int A[], int p, int r){ if(p >= r) return; else{ q = partition原创 2020-10-15 23:42:07 · 64 阅读 · 0 评论 -
求最大子数组问题
问题描述 假定你获得了投资挥发性化学公司的机会。与其他公司一样,该公司的股票价格是不稳定的。你被准许可以在某个时刻买进一股该公司的股票,并在之后的某个时期将其卖出。 你可以了解股票将来的价格,使得自己的利益最大化。你的任务是根据每天的股票价格,求得最大的收益。 输入 一个整数n,表示天数 接下来一行,n个整数,用空格隔开,表示每天的股价。 输出 一个整数,表示最大收益。 问题分析 这类问题就是典型的最大子数组问题,可以通过将后一天的股票值减去前一天的股票值,即可得到这两天买入售出所盈利(亏损)的值。 接着原创 2020-10-11 11:52:26 · 135 阅读 · 0 评论 -
归并之求逆序对个数
题目描述 给定一个整数序列,求逆序对的个数 主要思路 将整个序列分为左右两边的序列,左右两序列都已按从小到大的顺序排列,此时逆序对的个数即加上左侧序列大于右侧序列的逆序对数。 如左侧为(2,4,6),右侧为(1,3,5),通过循环发现 2>1,则易得后面的4,6均可与1形成逆序对(因为是按升序排列),基于此可写出代码 代码呈现 #include<bits/stdc++.h> //万能头文件 using namespace std; #define N 1005000; int a[N]原创 2020-09-24 18:27:23 · 261 阅读 · 0 评论