题目描述:

  从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。

分析:

  这可以用双端LIS方法来解决,先求一遍从左到右的,再求一遍从右到左的。最后从里面选出和最大的即可。

代码实现:

#include <iostream>using namespace std;int DoubleEndLIS(int *arr, int len)
{int *LIS = new int[len];int *lefToRight = new int[len];        //leftToRight[i]表示0~i最长子序列长度-1int *rightToLeft = new int[len];int maxLen = 0;        //记录总共的(上升+下降)最长子序列长度int low, high, mid;for (int i = 0; i < len; ++i){lefToRight[i]  = 0;LIS[i] = 0;}LIS[0] = arr[0];for (int i = 1; i < len; i++){low = 0; high = lefToRight[i-1];while (low <= high){mid = (low + high)/2;if (LIS[mid] < arr[i]){low = mid + 1;} else{high = mid -1;}}LIS[low] = arr[i];if (low > lefToRight[i-1]){lefToRight[i] = lefToRight[i-1] + 1;    //最长子序列长度加1
        }else{lefToRight[i] = lefToRight[i-1];}}//leftToRight的每个值增加1,因为他们是最长子序列值-1//此时leftToRight表示的是最长子序列的真正值。for (int i = 0; i < len; i++){lefToRight[i]++;}//从右到左for (int i = 0; i < len; i++){rightToLeft[i] = 0;LIS[i] = 0;}int k = 0;LIS[0] = arr[len-1];for (int i = len -2; i >= 0; --i){low = 0; high = rightToLeft[k];while (low <= high){mid = (low + high)/2;if (LIS[mid] < arr[i]){low = mid + 1;} else{high = mid - 1;}}LIS[low] = arr[i];if (low > rightToLeft[k]){rightToLeft[k+1] = rightToLeft[k] + 1;}else{rightToLeft[k+1] = rightToLeft[k];}++k;}for (int i = 0; i < k; ++i){rightToLeft[i]++;}//求最大值即为要求的for (int i = 0; i < len; ++i){cout<<"i: "<<i<<" "<<lefToRight[i]<<"  "<<rightToLeft[len-i-1]<<endl;if (lefToRight[i] + rightToLeft[len-i-1] > maxLen)maxLen = lefToRight[i] + rightToLeft[len-i-1];}cout<<"maxLen:"<<maxLen<<endl;delete LIS;delete lefToRight;delete rightToLeft;return len - maxLen + 1;
}int main()
{int arr[] = {1,5,7,6,9,3,8,4,2};int ret;ret = DoubleEndLIS(arr, 9);cout<<ret<<endl;return 0;
}

参考:http://blog.csdn.net/nciaebupt/article/details/8466049

但是,他的程序有问题,我做了修改。

从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...相关推荐

  1. Leetcode06.将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

    文章目录 一.题目 二.数学规律法解题思路 1.特殊情况 2.进行周期分析 3.同行相邻点的位置分析 4.注意事项 5.代码实现 三.模拟法 一.题目 将一个给定字符串 s 根据给定的行数 numRo ...

  2. JS中冒泡排序从小到大以及从大到小

    今天来讲一讲如何用JS来实现冒泡排序,冒泡排序可以分为从小到大排序以及从大到小排序,我们分别来看一下: 从小到大排序: var arr=[4,53,145,6,9,0,23,79,255,77]; f ...

  3. C语言实现查找一组数中的最大和最小值

    查找一组数中的最大.最小值 /*** 查找一组数中的最大数* @param nums 数组指针* @param step sizeof(type)* @param n 该组数中有几个数* @retur ...

  4. Excel 中如何找出两列数据中不重复的记录

    现在有两列数据,要在 A 列中找出 B 列中没有的记录,在 B 列中找出 A 列中没有的记录.现在和大家分享一下这个方法. 我们先用一个简单的例子看一下.现在有两列数据,可以是分别在不同的数据单(sh ...

  5. 算法 从 数中选出_算法可以选出胜出的nba幻想选秀吗

    算法 从 数中选出 Note from Towards Data Science's editors: While we allow independent authors to publish ar ...

  6. python取出一组数中的奇偶数

    最近学习python,思考了如何取出一组数中的奇数和偶数. 面临这个问题,首先是得对数组进行一个一个的搜素判断.其次,我们知道偶数与2取模之后必为0,故采用模为0的思想来做: 代码如下: #案列1-- ...

  7. 【面试现场】如何在10亿数中找出前1000大的数

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已经挂了两家,今天小史去了BAT中的最后一家面试了. 简单的 ...

  8. 浮点数存储格式学习:找到非规格数中最大和最小的数

    在学习<深入理解计算机系统>的浮点数存储里,我想到一个问题,单精度浮点数中,非规格浮点数最大数是几? 00000000011111111111111111111111 符号位:0 指数域: ...

  9. DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)

    DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出) 目录 利用pandas库统计某一列col中各个值出现的次数(降序输出) 输出结果 实现代码 利用pandas库统计某一 ...

最新文章

  1. linux系统软件包分类,Linux软件包管理和编译安装
  2. matlab单元数组和结构,Matlab使用单元数组和结构数组
  3. 剑指offer:滑动窗口的最大值(栈和队列)
  4. 能让中年人放下面子赚到钱的副业
  5. 工具开发:勿以善小而不为
  6. QPA(Qt Platform Abstraction)介绍 --------QWS(Qt Window System)介绍
  7. python search函数_python 正则表达式 (search与match函数)
  8. Django-Templates模板语法(三)
  9. 如何让ffplay或者ffmpeg支持H265编码的rtmp/http-flv 实时直播流
  10. 2017711010137 赵栋 《面向对象程序设计》第四章学习总结
  11. mysql is running but_MySQL: mysql is not running but lock exists 的解决方法
  12. python-docx+pandas实现word邀请函批量生成
  13. ubuntu安装RYU过程问题记录
  14. 查询数据(后台到前台传递数据,显示数据)
  15. 03 switch循环语句
  16. 暗黑破坏神3难度的钥匙去哪里打?
  17. R可视乎 | 散点图系列(2)
  18. 【特征提取】基于matlab共振峰估计【含Matlab源码 550期】
  19. 农业计算机英语词汇,考研英语作文主题词汇:农业
  20. 面板门限模型Matlab,空间面板门槛模型操作及应用

热门文章

  1. Zabbix---3 监控主机内存使用率
  2. 使用 HTTPS 方式登录防火墙USG6000设备
  3. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  4. 使用脚本快速查看Linux系统信息
  5. android ble 大小,Android BLE中传输数据的最大长度怎么破
  6. php yii应用运维,Windows运维之Windows下用cmd命令实例讲解yii2.0在php命令行中运行的步骤...
  7. angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题
  8. Web方式预览Office/Word/Excel/pdf文件解决方案
  9. 关于System.AccessViolationException异常
  10. [转]MySQL忘记密码的正确解决方法