问题描述:

三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai,aj,ak为一个三逆数。

现在给定一个长度为N的数组,求此数组序列中存在三逆数的总个数。

本人暂时只想到O(N^2)时间复杂度的解法。不知道还没有没更好更快的解法。(谁有更好的解法,欢迎分享~)

O(N^3)解法: 这个最直观了,直接三层循环进行统计,即可求和三逆数总和。代码太简单了,就略过了~

O(N^2)解法:

1.进行预处理,先用R[1..N]数组记录,R[i]表示在第i个元素后面比第i个元素小的个数之和,此步为基本的动态规划,时间复杂度为O(N^2)。

for(int i = 0; i< N; ++i) R[i] = 0;
for(int i = N-2; i>= 0; i--)
{
  for(int j = i+1; j <N; ++j)
  {
    if(A[i] > A[j]) { R[i] = max(R[i], R[j]+1); } 
  }
}

2.二层循环枚举每两个元素,并进行累加求总和。

1 for(int i = 0; i< N; ++i)
2 {
3 for(int j = i+1; j< N; ++j)
4 {
5      ans += (A[j] < A[i]) ? 0 : R[j];
6 }
7 }

最后ans就是结果。这步时间也是O(N^2)。

因此整个解法总的时间复杂度还是O(N^2).

【算法】简单动态规划——三逆数的O(N^2)解法!的更多相关文章

  1. 简单动态规划——三逆数的O(N^2)解法!

    [算法]简单动态规划——三逆数的O(N^2)解法! 问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai ...

  2. 【leetcode算法-简单】1.两数之和

    [题目描述] 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  3. 负载均衡算法: 简单轮询算法, 平滑加权轮询, 一致性hash算法, 随机轮询, 加权随机轮询, 最小活跃数算法(基于dubbo) java代码实现

    直接上干活 /** * @version 1.0.0 * @@menu <p> * @date 2020/11/17 16:28 */ public class LoadBlance { ...

  4. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  5. 贪心算法和动态规划[zz]

    http://www.cnblogs.com/asuran/archive/2010/01/26/1656399.html 贪心算法 1.贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过 ...

  6. 算法 排序lowB三人组 冒泡排序 选择排序 插入排序

    参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...

  7. ZOJ3574(归并排序求逆数对)

    Under Attack II Time Limit: 5 Seconds      Memory Limit: 65536 KB Because of the sucessfully calcula ...

  8. 数据挖掘算法学习(三)NaiveBayes算法

    算法简单介绍 NBC是应用最广的分类算法之中的一个.朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率.同一时候,NBC模型所需预计的參数非常少,对缺失数据不太敏感,算法也比較简 ...

  9. 多维算法思考(三):AB组合问题

    多维算法思考(三):AB组合问题 题目:x个A,y个B可以组合成多少个不同排列的问题. 首先,我们用数学的方式思考,这个问题属于<组合数学>的问题,我们的第一种方法可以用组合思路来求解. ...

随机推荐

  1. leetcode 116- Populating Next Right Pointers in Each Node

    题目: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode ...

  2. editplus3运行Python程序

    editplus3是一款不错的编辑器,他可以编译,运行java,php等各种程序,现把他运行Python程序的方法贴出来,首先得安装python,然后打开editplug3,工具——配置用户工具——组 ...

  3. java collections读书笔记(10) Set

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVgAAADbCAIAAACnXR7VAAAgAElEQVR4nOx9d1hVV9Y3880zb2YmM3 ...

  4. Lintcode: Permutation Index II

    Given a permutation which may contain repeated numbers, find its index in all the permutations of th ...

  5. new XMLHttpRequest()和页面关系

    1.  三个页面分别对应"自己“的异步对象(3个) <title></title> <script type="text/javascript&quo ...

  6. oracle 内外连接,左连接,右连接 区别

    首先讲解一下 on 与where后面接的条件的区别 on和where条件的区别如下:1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录.2.where条件是在 ...

  7. mysql错误日志路径

    造成该问题的原因有很多,单纯的百度google这个问题,很难找到正确的解决办法,要对症下药测才能解决:1.查看具体错误信息:  按:计算机管理——>系统工具——>事件查看器——>Wi ...

  8. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  9. Power Gating的设计(概述)

    Leakage power随着CMOS电路工艺进程,功耗越来越大. Power Domain的开关一般通过硬件中的timer和系统层次的功耗管理软件来进行控制,需要在一下几方面做trade-off: ...

  10. 在desk于webi中资料查询不一致

    1,首先检查是否勾选重复列,重复列造成 2,缓存