首页 > 其他分享 >查找大于等于左侧所有数小于等于右侧所有数

查找大于等于左侧所有数小于等于右侧所有数

时间:2023-05-22 19:06:03浏览次数:42  
标签:leftMax arr candidate int 所有 length 查找 等于 rightMin


在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。

实现

void test(){

    //int arr[] = {2, 5, 3, 6, 6, 9, 12, 7};
    int arr[] = {2, 4, 3, 9, 6, 5, 7};
    //int arr[] = { 2  3  3   5  5    5  7};
    //int arr[] = {1, 2, 3, 4, 5};
//    int arr[] = {4, 2};
    findSpecialNumber(arr, sizeof(arr)/sizeof(int));

    for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {
        printf("arr is %d\n", arr[i]);
    }
}

void findSpecialNumber(int arr[], int length){

    int candidate[length];

    //创建个参考数组将备份数组的内容倒序按照最大到小全部填充
    //将参考数组按倒序写为右边最小值 如 2336777
    //然后从左开始遍历 左侧最小值与参考数组 两者相遇既满足条件。

    candidate[length - 1] = arr[length - 1];

    for (int i = length - 2; i >= 0; i--) {
        if (arr[i] < candidate[i + 1]) {
            candidate[i] = arr[i];
        }else{
            candidate[i] = candidate[i + 1];
        }
    }
#if 0 - 也能实现但是不太优秀
        int rightMin;
        rightMin = arr[length - 1];
        for (int i = length - 2; i >= 0; i--) {

            if (rightMin < arr[i]) {
                candidate[i] = 0;
            }else if (rightMin > arr[i]){
                rightMin = arr[i];
                candidate[i] = arr[i];
            }else{
                candidate[i] = 0;
            }
        }
#endif

    int leftMax = arr[0];
    for (int i = 0; i < length; i++) {
        if (leftMax < arr[i]) {
            leftMax = arr[i];
        }
        if (leftMax == candidate[i]) {
            printf("此值可以的 %d\n", leftMax);
        }
    }

    for (int i = 0; i < length; i++) {
        printf("%d", candidate[i]);
    }
}


标签:leftMax,arr,candidate,int,所有,length,查找,等于,rightMin
From: https://blog.51cto.com/u_16124099/6326571

相关文章

  • java基于joda-date实现获取两个时间段对应类型的所有时间,比如说两年之间的所有日期,两
    /***获取两个时间段对应类型的所有时间**@paramtype日期类型,包含day、month、year*@parambeginTime开始时间*@paramendTime结束时间*@return*/publicstaticList<String>getBetweenTime(Stringtype,String......
  • linux查找文件内容 linux文件关键字搜索
    linux系统中,查看指定文件的指定内容,linux查找文件内容,linux文件关键字搜索:查找所有1.grep‘异常’catalina.out2.catcatalina.out|grep‘线程池计算当月理财余额异常’指定条件1.匹配行上下10行grep-10‘线程池计算当月理财余额异常’catalina.out2.匹配行前10行grep-B......
  • 51 | 分布式计算:如果所有人的大脑都联网会怎样?
    今天是原理篇的最后一篇。过去50讲,我们一起看了抽象概念上的计算机指令,看了这些指令怎么拆解成一个个简单的电路,以及CPU是怎么通过一个一个的电路组成的。我们还一起看了高速缓存、内存、SSD硬盘和机械硬盘,以及这些组件又是怎么通过总线和CPU连在一起相互通信的。......
  • 【DSP视频教程】DSP视频教程第12期:TI开源分享IQmath DSP源码,适用于所有Cortex-M内核,本
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 今年TI推出MSPM0系列产品配套的SDK软件包里面将此库开源了,之前的时候也移植过IQmatb,不过只有库版本,这次竟然开源了,确实是不可多得的好资源。这个是定点库,非常适合用于M0,  M0+,  M3和不带硬件F......
  • 通过 命令 DISM /Online /Get-Features 将显示在您的系统上安装的所有Windows功能列
    DISM/Online/Enable-Feature/FeatureName:<组件名称>/Allecho组件已成功启用!pause其中,<组件名称>是您要启用的组件的名称。可以在WindowsServer2022上使用以下命令列出可用组件:DISM/Online/Get-Features运行上面的命令后,将显示在您的系统上安装的所有Windows功能列表......
  • 折半查找
    #include<stdio.h>intmain(){ inti; intlow=0; inthigh=N-1; intmid; intk=-1; intm; inta[N]={-3,4,7,13,45,67,89,100,180}; printf("数组中的数据如下:\n"); for(i=0;i<N;i++) { printf("%4d",a[i]); } printf("\n"); printf......
  • php 操作数组 (合并,拆分,追加,查找,删除等)
    1.合并数组array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:Php代码1.arrayarray_merge(array这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组......
  • 【代码练习】一道题带你掌握二分查找
    二分查找解析:思路一:暴力解法,直接遍历,从头开始查找,如果找到直接返回下标,找不到返回-1。classSolution{public:intsearch(vector<int>&nums,inttarget){for(inti=0;i<nums.size();i++){if(nums[i]==target)......
  • 【代码随想录算法训练营第一天】704. 二分查找、27. 移除元素
    Day1-数组Leetcode704二分查找初解已经不记得二分查找了,遍历找O(n)其实也过了,只是借此复习一下二分,确实快很多。二分的前提条件题目里也都明示了:无重复,(从小到大)排序。我没有用到这个条件,自然时间复杂度高于最优解。看完解答我再看了一眼题目的标题,才知道是考BinarySearch嗯......
  • 基于python实现-根据Excel表格指定的UniqueKey的顺序-到另一个参考表格中查找-补全与
    今天笔者在整理一份数据时,有这样一个需求,已知有多个ID是UniqueKey,每一个UniqueKey及与它相关的数据为一行,存放于Excel表格行中但他们相关的数据可能有误,而另一个表格Excel-02中的数据没有问题,但是UniqueKey顺序与第一个表格不一样现在主要是要修改第一个表格的数据,当然可以使用......