最短排序子数组

最短排序数组(动态规划) 题目描述 对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。 给定一个整数数组A及它的大小n,请返回最短子数组的长度。 测试样例: [1,5,3,4,2,6,7],7 返回:4 class ShortSubsequence { public: int findShortest(vector<int> A, int n) { vector<int 阅读详情


对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。

给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。

测试样例:
[1,4,6,5,9,10],6
返回:2

分析:求出需要排序的最短子数组的右界(设定初值为max,后面元素比max大,说明是正常情况,max继续向后走即可,若不比max大,那么标记它为right_noneed_sort。由于中间可能获得一个大于max的,那么需要继续循环,可能还会更新right_noneed_sort,防止后面可能还需要排序),然后再求出左界,相减+1即为长度。

注意:元素相等的情况。


代码如下:

class Subsequence {
public:
    int shortestSubsequence(vector<int> A, int n) {
        if(n < 0 || ((A.size()==0) ^ (n==0)))
            return -1;
        
        int left_noneed_sort = 0, 
       		right_noneed_sort = -1;   //for return case : n == 0
        
        int max = A[0];
        for(int i=1; i<n; ++i){
        	if(A[i] >= max)
                max = A[i];   //notice "="
            else
                right_noneed_sort = i;
        }
        
        int min = A[n-1];
        for(int j=n-2; j>=0; --j){
            if(A[j] <= min)
                min = A[j];
            else
               	left_noneed_sort = j;
        }
        
        return right_noneed_sort - left_noneed_sort + 1;
    }
};



(六)需要排序的最短子数组长度 【题目】给定一个无序数组arr,求出需要排序的最短子数组的长度 【举例】arr = [1,5,3,4,2,6,7];返回4,只有 [5,3,4,2]需要排序 【要求】时间复杂度O(n),空间复杂度O(1) 【解题思路】 (1)先从右往左遍历,初始化变量noMinIndex = -1,用minNum记录遍历过程中右侧出现过的数的最小值。假设当前数为arr[i],如果arr[i]>minNum,说明如果要整体有序,minNum值必须挪到arr[i]的左边。用noMinIndex记录最左边出现这种情况的位置 阅读详情

相关推荐

DC综合中set_dft_signal的实战配置与优化策略

本文深入解析了DC综合中set_dft_signal命令的实战配置与优化策略。文章从命令的核心作用出发,详细拆解了-view、-type、-usage等关键参数,并通过扫描使能与时钟门控的实战案例,展示了如何正确配置以实现测试模式下的功耗优化。同时,文章总结了高级优化策略、与低功耗流程的协同方法以及常见错误排查清单,旨在帮助数字芯片设计工程师构建高可测性、低功耗的稳健DFT基础。

weixin_28347369的博客 405

数据结构与算法分析笔记与总结(java实现)--排序12:最短子数组练习题

数据结构与算法分析笔记与总结(java实现)--排序12:最短子数组练习题

小菜鸟也想飞的博客 495

MicroPython驱动ST7789屏避坑实录:从GB2312到完整中文字库的升级之路

本文详细介绍了使用MicroPython驱动ST7789显示屏实现完整中文字库显示的实战方案。从硬件选型到字库系统改造,再到内存优化和显示性能提升,提供了一套突破GB2312限制的全套中文显示解决方案,特别适合ESP32开发者在物联网设备中实现高质量中文显示。

weixin_29190573的博客 394

需要排序的最短子数组的长度

【题目】  给定一个无序数组arr,求出需要排序的最短子数组长度。   例如: arr = [1, 5, 3, 4, 2, 6, 7]返回4,因为只有[5, 3, 4, 2]需要排序。【思路】        双指针        第一次从左向右遍历,找左边比当前位置大的        第二次从右向左遍历,找右边比当前位置小的【代码】int findMinUnSortArray(int *arr ,...

behboyhiex的博客 1168

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6548

AG32VF407直流电流采集仪设计:从1uA到10A宽范围采样与FPGA加速方案

本文详细介绍了基于AG32VF407芯片的直流电流采集仪设计方案,实现了从1uA到10A的宽范围采样。方案采用低噪声电源、精密运放调理、高速比较器自动档位切换及高精度ADC同步采样,并重点阐述了利用AG32VF407片内FPGA实现硬件加速以提升性能的架构思路,为精密电流测量提供了完整的硬件与FPGA加速解决方案。

weixin_33245447的博客 312

每日算法之—排序最短子数组

题目: 给定整形数组nums,求需要排序的最短子数组的长度。 如:nums=[1,5,4,3,2,6,7], 输出结果为4。 解释:只有[5,4,3,2]需要排序,故输出4。 解决办法:  从前往后和从后往前两次遍历数组。 从前往后遍历时,首先默认首元素为max,当遍历的当前值小于max时,记录下元素位置为p,否则更新max为当前元素。 从后往前遍历时,默认尾元素为min,当遍历的...

qq_28044241的博客 257

Windows Server 2022域控环境下的MDT部署工具安装与配置避坑指南

本文详细介绍了在Windows Server 2022域控环境中安装和配置MDT(Microsoft Deployment Toolkit)的全流程,包括ADK与Windows PE的精准安装、MDT高级配置、部署工作流构建及性能优化技巧。通过实战指南帮助IT管理员实现自动化系统部署,提升企业IT运维效率,特别适用于需要静默下发系统的大规模部署场景。

weixin_28481133的博客 439

数组与矩阵:需要排序的最短子数组长度(C++版)

//★题目:需要排序的最短子数组长度 //要求:给定一个无序数组arr,求出需要排序的最短子数组长度。 // 例如:arr = [1,5,3,4,2,6,7],返回4,因为只有[5,3,4,2]需要排序 #include #include using namespace std; int getMinLength(vector matrix); void printVector1(v...

懂代码的暖男 343

2、TCGA数据处理(差异分析前处理)

注意:1、是R语言中用于读取文本文件并创建数据框的函数。它可以从文本文件中读取数据并将其存储为数据框的形式,每一列代表一个变量,每一行代表一个观察值。2、括号要成对,不能少了;3、file = 'TCGA-LIHC.htseq_counts.tsv'引号可以是单或双引号,建议单;4、逗号主要中英文,都是用英文模式才没错;5、.tsv文件类型必须要有,不能删除,否则读不进来;6、上面代码将TCGA-LIHC.htseq_counts.tsv文件读入并赋值给count1。

PLW_12的博客 2668

STM32学习笔记【江科协】【4-2】OLED显示屏

可以注意到接电源的GND和VCC同时和PB6、PB7号口连接,我们可以直接不初始化这两个引脚解决,因为STM32的引脚上电后,如果不初始化,默认是浮空输入的模式,在这个模式下,引脚不会输出电平,所以不会有什么影响,或者直接给PB6口输出低电平,PB7口输出高电平,用GPIO口直接给OLED供电,这个也是没问题的,因为OLED的功率很小这个也是可以驱动的,不过用GPIO口供电不是很规范,实际项目还是用电源供电。然后点击这里放大镜里面带d的图标,进入调试模式,这个界面里,

m0_74651303的博客 1595

【搞定算法】需要排序的最短子数组长度

题目:给定一个无序数组 arr,求出需要排序的最短子数组长度。例如:arr = [1,5,3,4,2,6,7] 返回 4,因为只有 [5,3,4,2] 需要排序。 要求:时间复杂度 O(N)、额外空间复杂度O(1)。 假设数组为 [a b c d e f g h i j k l m n],如果 abc 是有序的,mn是 有序的,至于中间的 defghijkl 是无序的,我们可以得知,如果...

Java学习 1477

2026年AI视频生成大模型全景指南:国内外主流工具深度对比与选型建议

AI视频生成技术在2025年至2026年间取得了突破性进展,从"能用"进化到"好用",商业化应用加速落地。中美双轨竞争格局基本成型,国内模型在技术追赶和本土化体验方面展现出强劲竞争力。对于用户而言,选择合适的AI视频生成工具需要综合考虑技术性能、使用门槛、成本预算和具体需求。零基础新手推荐海艺AI、通义万相等低门槛工具;进阶创作者可根据需求选择可灵AI、即梦AI、海艺AI等;专业开发者和企业用户可考虑智谱清影的开源能力或可灵AI的商业化服务。

nmdbbzcl的博客 2849

需要排序的最短子数组

对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度./* 思路:首先,从左往右遍历数组,单独用一个变量记录遍历过得最大值 * 遇到遍历过的最大值大于当前数的情况,记录这种情况的最右的位置 * 然后从右往左遍历数组,用一个变量记录遍历过得最小值 * 遇到最小值比当前数要小的情况,记录这种情况的最左的位置 * 最做的位置和最右的位置中间的范围就是最短子数组 * */

zdy_lsh的博客 413

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

需要排序的最短子数组长度

【题目】给定一个无序数组arr,求出需要排序的最短子数组长度。 例如:arr=[1,5,3,4,2,6,7]返回4,因为只有[5,3,4,2]需要排序 public class GetMinLength { /* * 给定一个无序数组arr,求出需要排序的最短子数组长度 */ public static int getMinLength(int[] arr) { if (arr =...

gkq_tt的博客 292

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

排序16:最短子数组

排序16:最短子数组

小菜鸟也想飞的博客 604

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

排序题目:最短无序连续子数组

存在无序子数组,则在从左到右遍历数组的过程中会遇到当前元素小于已经遍历过的元素的情况,在从右到左遍历数组的过程中会遇到当前元素大于已经遍历过的元素的情况,即遍历到的元素的大小不符合单调性。在从左到右遍历数组的过程中,从栈底到栈顶的下标对应的元素单调递增(非严格);在从右到左遍历数组的过程中,从栈底到栈顶的下标对应的元素单调递减(非严格)。的时间,遍历两个数组寻找最短无序子数组的开始下标和结束下标需要。如果存在元素不同的下标,则最短无序子数组的下标范围是。如果不存在元素不同的下标,则最短无序子数组的长度是。

stormsunshine的博客 870

8.6需要排序的最短子数组长度

题目 给定一个无序数组arr,要使数组排序成递增的,求出需要排序的最短子数组长度。 代码实现 public class GetMinLength { public int getMinLength(int[] arr) { if (arr == null || arr.length < 2) { return 0; } ...

Forat 247

LeetCode 581. 最短无序连续子数组(排序&单调栈)

文章目录1. 题目2. 解题2.1 排序2.2 4次遍历2.3 单调栈 1. 题目 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 你找到的子数组应是最短的,请输出它的长度。 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变...

Michael是个半路程序员 1519
上一篇: 小范围排序 --使用堆排序
下一篇: 相邻两数最大差值
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值