首页 > 其他分享 >【排序最少操作数,最长子序列】MT笔试

【排序最少操作数,最长子序列】MT笔试

时间:2023-05-15 19:11:51浏览次数:35  
标签:count 操作数 int 笔试 个数 MT 序列 include cmp

题目:

给一个n个数的排列,n的数的范围为1~n且各不相同,比如[3,1,2]为一个3个数的排列。
现在要求对这个无序的n个数的排列,排成一个递增序列,但只能进行一种操作:从n个数中任选两个数,大的放最后一位,小的放第一位,问最少进行多少次这种操作,n个数的排列最终变成一个递增序列。
例如[1,5,4,2,3],最少需要2次这种操作(第一次选4和2,2放第一位,4放最后一位,变成[2,1,5,3,4];第二次选1和5,变成[1,2,3,4,5],需要2次操作)

 

输入为n个数,数和数之间用空格隔开,输出最少的操作次数。

 

示例输入:
1 5 4 2 3
输出:
2

 

思路:

从头遍历这个数组,建立一个辅助数组存储 当前元素作为尾的、最长递增为 1 的子序列长度;那么前有(当前数 - 长度)个数,后有(n - 当前数)个数,选择这两个数中最大的数为操作数;

遍历完整个数组后找到最少的操作数(可以知道 n/2 为默认最多的操作次数)

 

 1 #include <iostream>
 2 #include <vector>
 3 #include <sstream>
 4 #include <string>
 5 
 6 using namespace std;
 7 
 8 int LIS(vector<int>v)
 9 {
10     int cmp = v.size() / 2; //最多排 n/2 次
11     int count = v.size();   //总共有多少个数
12     vector<int>assist(count, 1);    //辅助数组,存储最长递增为1的子序列长度(可以不连续,但是公差必须为1)
13     for (int i = 1; i < count; i++) {
14         for (int j = 0; j < i; j++) {
15             if (v[i] == v[j] + 1) { //是递增为1的子序列
16                 assist[i] = assist[j] + 1;
17                 int cmp2 = max(v[i] - assist[i], count - v[i]); //以v[i]为尾的子序列,前面有多少数,后面有多少数,选最大的那个
18                 cmp = min(cmp, cmp2);   //与当前最小的排序次数作比较
19             }
20         }
21     }
22     return cmp;
23 }
24 
25 int main() {
26 
27     string input;
28     getline(cin, input);
29 
30     istringstream iss(input);
31     int num;
32     vector<int>numbers;
33     while (iss >> num) {
34         numbers.push_back(num);
35     }   //此时输入的数字已经处理完毕
36 
37     int result = LIS(numbers);
38     cout << result << endl;
39 
40     return 0;
41 }

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

标签:count,操作数,int,笔试,个数,MT,序列,include,cmp
From: https://www.cnblogs.com/wjjgame/p/17402824.html

相关文章

  • 使用Eclipse JEE+Mtj+Nokia S60 V3SDK开发J2ME应用的环境搭建
    使用EclipseJEE+Mtj+NokiaS60V3SDK开发J2ME应用的环境搭建2010-04-0716:53   在NokiaS60V3下进行J2ME应用程序开发,需要搭建Nokia官方提供的SDK环境。一般的J2ME应用开发使用Sun公司的J2MESDK就可以了,如果需要开发基于NokiaS60手机应用,就需要Noki......
  • Mongodb 以及 node.js中使用mongoose操作数据库
    Mongodb以及node.js中使用mongoose操作数据库1、lowdb一个简陋的数据库第三方库,使用JSON文件来保存数据,进行增删改查。在没有数据库或者数据量小到不使用数据库的时候可以使用,了解即可。2、Mongodb是什么?MongoDB是一个基于分布式文件存储的数据库。相比于纯文件管理数据,数......
  • 2023大连思科-英语技术顾问(BDE)笔试技术卷编程题
    记录自己第一次手撕代码...1.html实现以下布局2.给定一个包含n个正整数的数组和一个正整数s,找出数组中满足其和sum>=s的长度最小的连续子数组,并返回其长度。如果不存在子数组,则返回0。publicintminSubArrayLen(inttarget,int[]nums){intleft=0;......
  • 记一次基于FPGA的VGA显示四操作数计算器工程的开发流程——(1)从顶层设计说起
    首先值得说明的是,在这个项目几乎完成之际,笔者才愈发体会到了硬件思维和软件思维的云泥之别。不幸的是,在此项目的实现过程中,绝大部分代码的思维仍然是软件思维,因此该项目主要模块的设计部分可能并不能体现硬件操作的独到之处,不符合硬件工程师的基本设计思维,所以此主题文章仅用于学......
  • 三菱FX3U rtu方式通讯欧姆龙E5EZ-R3MT程序示例 需要硬件:三菱FX3U plc,F
    三菱FX3Urtu方式通讯欧姆龙E5EZ-R3MT程序示例需要硬件:三菱FX3Uplc,FX3U-485BD通讯板,欧姆龙E5EZ支持通讯的温控器。实现功能:设定温度sv,实时温度pv,报警值ALM1和ALM2设定,实时数据的读取,运行停止的控制及运行状态的监视指示。更多功能可以参考通讯手册添加修改。更多说明:欧姆龙新......
  • MT6739 芯片/处理器规格参数介绍 MTK6739核心板
    MT6739芯片采用了四核Cortex-A53的架构,搭配PowerVRGE8100GPU,整合支持最高1080p30fps的视频编解码器和4GCat-4LTE调制解调器以及高达8MP的摄像头,为智能终端提供了一种高效的解决方案。基于MT6739的智能手机配合400MHz的GPU时钟速度能够支持扎实的图像性能表现和出色的......
  • MT6761 芯片/处理器参数介绍 MTK6761 核心板
    MT6761是联发科推出的一款低功耗、高效能的中端移动处理器。它采用了四核Cortex-A53处理器和IMGGE8300GPU,与其它中端处理器相比,MT6761在CPU和GPU性能方面都有明显提升。在性能方面,MT6761的主频为2.0GHz,采用全新的12nm制程工艺,配备了4GBLPDDR3RAM,这使其处理速度得到了......
  • MT4 CRM 源码
    一套MT4CRM源码,同时支持MT4进行对接使用,支持代理返佣自由进行设置,可自动实时同步manager后台分组、交易品种和客户所有信息。包括带有内部实时内转功能,支持任何第三方支付、区块链和电子钱包。整套系统功能齐全。可节约公司大量租用成本和防止第三方公司泄露客户资料等核心数据......
  • 开源.NetCore通用工具库Xmtool使用连载 - 随机值篇
    【Github源码】《上一篇》详细介绍了Xmtool工具库中的散列算法类库,今天我们继续为大家介绍其中的随机值类库。基于系统提供的Random获取随机值方法已经足够简单和易用,本类库只对日常开发过程中最常用到的生成随机验证码方法进行了封装,后续发现其他有价值的常用随机值需求,会陆......
  • MT8365 安卓核心板,MTK8365 4G/5G安卓主板相关方案定制
    MT8365核心板采用四核ARM®Cortex-A53架构(主控型号I350),主频高达2.0GHz,同时搭载Mali-G523EEMC1GPU和NPUAI0.45TOPS。这使MT8365成为市场上性能最强的四核CPU之一,能够播放各种高清格式的视频,高效处理复杂的互动操作,为用户带来无缝的体验。MT8365是一款中高端性能......