从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...
题目描述:
从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。
分析:
这可以用双端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
但是,他的程序有问题,我做了修改。
从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...相关推荐
- Leetcode06.将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
文章目录 一.题目 二.数学规律法解题思路 1.特殊情况 2.进行周期分析 3.同行相邻点的位置分析 4.注意事项 5.代码实现 三.模拟法 一.题目 将一个给定字符串 s 根据给定的行数 numRo ...
- JS中冒泡排序从小到大以及从大到小
今天来讲一讲如何用JS来实现冒泡排序,冒泡排序可以分为从小到大排序以及从大到小排序,我们分别来看一下: 从小到大排序: var arr=[4,53,145,6,9,0,23,79,255,77]; f ...
- C语言实现查找一组数中的最大和最小值
查找一组数中的最大.最小值 /*** 查找一组数中的最大数* @param nums 数组指针* @param step sizeof(type)* @param n 该组数中有几个数* @retur ...
- Excel 中如何找出两列数据中不重复的记录
现在有两列数据,要在 A 列中找出 B 列中没有的记录,在 B 列中找出 A 列中没有的记录.现在和大家分享一下这个方法. 我们先用一个简单的例子看一下.现在有两列数据,可以是分别在不同的数据单(sh ...
- 算法 从 数中选出_算法可以选出胜出的nba幻想选秀吗
算法 从 数中选出 Note from Towards Data Science's editors: While we allow independent authors to publish ar ...
- python取出一组数中的奇偶数
最近学习python,思考了如何取出一组数中的奇数和偶数. 面临这个问题,首先是得对数组进行一个一个的搜素判断.其次,我们知道偶数与2取模之后必为0,故采用模为0的思想来做: 代码如下: #案列1-- ...
- 【面试现场】如何在10亿数中找出前1000大的数
小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已经挂了两家,今天小史去了BAT中的最后一家面试了. 简单的 ...
- 浮点数存储格式学习:找到非规格数中最大和最小的数
在学习<深入理解计算机系统>的浮点数存储里,我想到一个问题,单精度浮点数中,非规格浮点数最大数是几? 00000000011111111111111111111111 符号位:0 指数域: ...
- DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)
DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出) 目录 利用pandas库统计某一列col中各个值出现的次数(降序输出) 输出结果 实现代码 利用pandas库统计某一 ...
最新文章
- linux系统软件包分类,Linux软件包管理和编译安装
- matlab单元数组和结构,Matlab使用单元数组和结构数组
- 剑指offer:滑动窗口的最大值(栈和队列)
- 能让中年人放下面子赚到钱的副业
- 工具开发:勿以善小而不为
- QPA(Qt Platform Abstraction)介绍 --------QWS(Qt Window System)介绍
- python search函数_python 正则表达式 (search与match函数)
- Django-Templates模板语法(三)
- 如何让ffplay或者ffmpeg支持H265编码的rtmp/http-flv 实时直播流
- 2017711010137 赵栋 《面向对象程序设计》第四章学习总结
- mysql is running but_MySQL: mysql is not running but lock exists 的解决方法
- python-docx+pandas实现word邀请函批量生成
- ubuntu安装RYU过程问题记录
- 查询数据(后台到前台传递数据,显示数据)
- 03 switch循环语句
- 暗黑破坏神3难度的钥匙去哪里打?
- R可视乎 | 散点图系列(2)
- 【特征提取】基于matlab共振峰估计【含Matlab源码 550期】
- 农业计算机英语词汇,考研英语作文主题词汇:农业
- 面板门限模型Matlab,空间面板门槛模型操作及应用
热门文章
- Zabbix---3 监控主机内存使用率
- 使用 HTTPS 方式登录防火墙USG6000设备
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- 使用脚本快速查看Linux系统信息
- android ble 大小,Android BLE中传输数据的最大长度怎么破
- php yii应用运维,Windows运维之Windows下用cmd命令实例讲解yii2.0在php命令行中运行的步骤...
- angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题
- Web方式预览Office/Word/Excel/pdf文件解决方案
- 关于System.AccessViolationException异常
- [转]MySQL忘记密码的正确解决方法