ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

在排序数组中查找元素的Ceil

前开发者教程 2020年7月15日

题:
您会得到一个数组和一个键。您需要返回该元素的Ceil。

什么是Ceil?

如果给您一个数字,请说“5.8”,该数字的下限是5,ceil是6。

这个问题中的Ceil是什么?

数组= {1,2,3,4,6,7,8,9};

键= 5;

在上面的数组中,元素5不存在。但是我们需要找到5的Ceil。5的下限是6。

因此我们可以定义Ceil是大于给定键的最小元素。

因此,根据以上定义,大于5的最小元素为6。

我们可以通过二进制搜索解决这个问题。

当我们得到中间元素时,我们检查中间元素是否等于键。如果相等,则返回。

否则,我们需要向右或向左移动一半。

当移动数组的左侧时,我们将元素保存在该索引处,然后移动到左侧的一半。

否则,我们直接移到右半部分。

C ++解决方案

#include <iostream>
using namespace std;

int ceil = -1;
int get_floor(int arr[], int length, int key)
{
    int start = 0;
    int end = length - 1;

    while (start <= end)
    {

        int mid = (start + end) / 2;

        if (arr[mid] == key)
            return arr[mid];

        // return mid-1 if arr[mid - 1] is equal to key
        else if (key < arr[mid])
        {
            ceil = arr[mid];
            end = mid - 1;
        }

        else
        {
            start = mid + 1;
        }
    }

    return ceil;
}


int main(void) 
{ 
    int arr[] = {1, 2, 3, 4, 6, 7, 8, 9}; 
    int size = sizeof(arr) / sizeof(arr[0]); 
    int key = 5;

    int result = get_floor(arr, size, key);

    cout<<" The floor of "<< key <<" is " <<result<<endl;

    return 0; 
} 

输出:

The floor of 5 is 6

 

 

分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的
<q id="HjzPmQl"><figcaption id="RfyfKah"></figcaption></q>
<footer id="fZl0dK4"></footer>




      1. <strike class="nlPZyUa"></strike>



          1. <tr id="ULgiyVp"><acronym id="kwSvkAw"><tr id="KpPZtP2"></tr></acronym></tr>


            1. <source id="vHTGFFp" class="v5TuS4u"><hgroup id="NPpHMYh" class="NfAKzS4"></hgroup></source>