当前位置: 首页 > article >正文

需要排序的子数组

题目描述

给定一个无序数组arr,求出需要排序的最短子数组长度
要求:O(N)
如输入:arr={2,3,7,5,4,6},返回4,因为只有{7,5,4,6}需要排序。

分析

以{2,3,7,5,4,6,8,9}为例:
在这里插入图片描述

前端小于最小波谷(3)的部分线段不用排序,所以{2,3}不用排序
后端大于最大波峰(7)的部分线段不用排序,所以{8,9}不用排序
注意,起点可能是波峰,终点可能是波谷。

package com.company;

import com.company.util.ArrayUtil;
import org.omg.CORBA.INTERNAL;

import java.util.Arrays;

public class Test9 {
    public static void main(String[] args) {
//        int[] arr={2,3,3,7,5,4,6,8,9};
//        int[] arr={2,3,4,5,6,7};
//        int[] arr={7,5,4,6,2,3};
//        int[] arr={3, 9, 3, 2, 0, 0};
        int[] arr=ArrayUtil.randomArray(0,10,6);
//        求最大波峰,最小波谷
        int max=Integer.MIN_VALUE,min=Integer.MAX_VALUE;
        if(arr[0]>arr[1]){
            max=arr[0]>max?arr[0]:max;

        }
        for (int i = 1; i < arr.length-1; i++) {

            if(arr[i]>=arr[i-1]&&arr[i]>=arr[i+1]){//波峰
                max=arr[i]>max?arr[i]:max;
            }

            if(arr[i]<=arr[i-1]&&arr[i]<=arr[i+1]){//波谷

                System.out.println(arr[i]);
                min=arr[i]<min?arr[i]:min;
            }

        }
        if( arr[arr.length-2]>arr[arr.length-1]){
            min=arr[arr.length-1]<min?arr[arr.length-1]:min;

        }
        System.out.println("max="+max);
        System.out.println("min="+min);
        //前面小于min的元素个数
        int c1=0,c2=0;
        if(arr[0]<=min) {
            c1++;
            int i = 1;
            while (arr[i] <=min && arr[i] >= arr[i - 1]) {
                i++;
                c1++;
            }
        }

        System.out.println("c1="+c1);
//        后面大于max的元素个数
        if(arr[arr.length-1]>=max) {
            c2++;
            int i = arr.length - 2;
            while (arr[i] >= max && arr[i] <= arr[i + 1]) {
                i--;
                c2++;
            }
        }

        System.out.println("c2="+c2);
        int sortLen=c1>c2?c1:c2;
        System.out.println(sortLen);
        System.out.println(Arrays.toString(arr));
        System.out.println(arr.length-sortLen);

    }
}


http://www.kler.cn/a/428059.html

相关文章:

  • 5.3.2 软件设计原则
  • 如何解决Unit sshd.service could not be found
  • 【C++】List的模拟实现
  • 金融级分布式数据库如何优化?PawSQL发布OceanBase专项调优指南
  • 论文阅读(七):贝叶斯因果表型网络解释遗传变异和生物学知识
  • 单片机基础模块学习——超声波传感器
  • 学生信息管理系统(简化版)后端接口
  • OpenAI 发布 o1 Pro 与 ChatGPT Pro:更强大、更智能的 AI 助手
  • 【设计模式系列】状态模式(二十三)
  • 关于删除有序数组中的重复项问题的几种方法
  • 捷米特 EtherNet/IP 总线协议网关的具体内容介绍
  • VMD + CEEMDAN 二次分解——创新预测模型合集
  • 计算机的错误计算(一百七十八)
  • IDC研究报告|云轴科技ZStack入选中国生成式AI应用开发平台主要厂商
  • Methods and Initializers
  • [学习笔记]JavaScript的异步编程
  • 【ArcGIS微课1000例】0134:ArcGIS Earth实现二维建筑物的三维完美显示
  • 用shell完成一个简单脚本
  • android 富文本及展示更多组件
  • Vulnhub--FristiLeaks_1.3 脏牛提权
  • CentOS 创建逻辑卷合并多个物理卷
  • golang 调用 github.com/Shopify/sarama 库坑记录
  • 深入 Java 基础 XML:高级特性与最佳实践
  • ADAS前装定点激增,机器人灵巧手亮相,速腾开辟第二增长曲线
  • 电影院订票选座小程序+ssm
  • 【机器学习算法】——逻辑回归